Kann nicht-utf8-Zeichen, die von einer http-Anfrage gelesen wurden, nicht analysieren und anzeigen

8

Ich verwende Java, um diese Anfrage zu analysieren

Ссылка

was dazu führt, dass die JSON-Datei (abgekürzt wegen der Kürze):

%Vor%

Mein Problem liegt in den zurückgegebenen arabischen Zeichen (das könnte auch irgendein Nicht-Unicode sein). Ich habe versucht, sie zurück zu Unicode zu konvertieren, indem ich etwas wie folgt benutze:

%Vor%

Allerdings sind sowohl die 'Vorher'- als auch die Nachher'-Ergebnisse gleich: eine Menge von ???' s, unabhängig davon, ob ich sie in der Server-Protokolldatei oder in einer HTML-Seite ausgabe. Gibt es eine andere Möglichkeit, die arabischen Zeichen zurückzubekommen und sie auf einer Webseite auszugeben?

Hat JSON irgendeine unterstützende Funktionalität für diese Art von Problem, vielleicht um die Nicht-Utf-Zeichen direkt von dem JSON-Objekt zu lesen?

    
Gray 16.11.2009, 18:22
quelle

6 Antworten

7

Das Problem, das Sie haben, wird höchstwahrscheinlich durch falsche Einstellung der Zeichencodierung an dem Punkt verursacht, den Sie in der HTTP-Antwort von Google lesen. Können Sie den Code posten, der die URL tatsächlich erhält und in das JSON-Objekt einfügt?

Als Beispiel führen Sie Folgendes aus:

%Vor%

Hier wird der ziemlich hässliche Standard URL.openConnection() verwendet, der seit Anbeginn der Zeit existiert. Wenn Sie so etwas wie Apache httpclient verwenden, können Sie das sehr einfach tun.

Für ein bisschen Hintergrund lesen auf Codierung und vielleicht eine Erklärung, warum new String (str.getBytes(), "UTF8"); nie arbeiten wird lesen Sie Joel Artikel auf Unicode

    
Gareth Davis 16.11.2009 19:10
quelle
2

Ich denke, das Java JSON-Paket von JSON.org kann nicht mit UTF8 umgehen, egal ob es als UTF8-Zeichen übergeben wird oder den Code \uXXXX tatsächlich übergibt. Ich habe beides wie folgt versucht:

%Vor%

Ich bekomme:

%Vor%

Irgendwelche Ideen?

    
Marc Hacker 09.06.2010 11:03
quelle
1

Der wichtige Teil des Problems besteht darin, wie Sie den Inhalt der HTTP-Antwort behandeln. Das heißt, wie erstellen Sie das Objekt json ? Wenn Sie den Code in Ihrem ursprünglichen Post erhalten, ist der Inhalt bereits beschädigt.

Die Anforderung führt zu UTF-8-codierten Daten. Wie analysierst du es in JSON-Objekte? Ist die richtige Codierung für den Decoder angegeben? Oder wird die Standardzeichencodierung Ihrer Plattform verwendet?

    
erickson 16.11.2009 18:37
quelle
1

Versuchen Sie es zuerst:

%Vor%

Öffnen Sie dann die Datei im Editor. Wenn dies in Ordnung ist, liegt das Problem in Ihrem Logger oder Ihrer Konsole, dass es nicht für die Verwendung von UTF-8 konfiguriert ist. Ansonsten liegt das Problem wahrscheinlich in der verwendeten JSON-API, die nicht für die Verwendung von UTF-8 konfiguriert wurde.

Bearbeiten : Wenn das Problem tatsächlich in der verwendeten JSON-API liegt und Sie nicht wissen, welche Sie auswählen sollen, dann empfehle ich, Google . Es vereinfacht die Konvertierung einer JSON-Zeichenfolge in eine einfach zu verwendende JavaBean. Hier ist ein einfaches Beispiel:

%Vor%

Er gibt die Ergebnisse gut aus. Hoffe, das hilft.

    
BalusC 16.11.2009 18:31
quelle
1

Es gibt eine Bibliothek , die die Kodierung der http-Antwort (tschechische Ausdrücke) beibehält JSon Nachricht wie folgt:

%Vor%

Die Antwort ist knifflig und es gibt ein paar Punkte, auf die man achten muss, vor allem auf die Plattformcodierung:

afaik beeinflusst das Ausdrucken in der Konsole, das Erstellen von Dateien aus einem Eingabestream und sogar die Kommunikation zwischen DB-Client und Server, obwohl beide utf-8-Zeichensatz für die Codierung verwenden - egal, ob ich explizit utf-8 string, inputstreamReader, erstelle Oder setzen Sie den JDBC-Treiber für UTF-8, wobei Sie die $ LANG-Eigenschaft auf xx_XX.UTF-8 auf Linux-Systemen einrichten und append="vt.default_utf8 = 1" zum LILO-Bootloader hinzufügen (auf Systemen, die ihn verwenden) Zumindest für Systeme, auf denen Datenbank- und Java-Anwendungen laufen, die mit utf-8-kodierten Dateien arbeiten.

Selbst wenn ich diesen JVM-Parameter -Dfile.encoding = UTF-8 anfüge, ist es mir ohne die Plattformkodierung nicht gelungen, richtig codierte Streams zu erhalten. Der JDBC-Connector muss richtig eingerichtet sein: "jdbc: mysql: // localhost / DBname? UseUnicode = true & amp; characterEncoding = UTF8", wenn Sie die Strings in einer Datenbank speichern wollen, die in diesem Zustand sein sollte:

%Vor%     
lisak 16.09.2010 11:31
quelle
0

Die Google API sendet UTF-8 korrekt. Ich denke, das Problem ist, dass Ihre Standard-Codierung nicht in der Lage ist, Arabisch auszugeben. Überprüfen Sie Ihre file.encoding -Eigenschaft oder erhalten Sie die Codierung wie folgt,

%Vor%

Wenn die Standardcodierung ASCII oder Latin-1 ist, erhalten Sie "?" s. Sie müssen es in UTF-8 ändern.

    
ZZ Coder 16.11.2009 19:05
quelle

Tags und Links