Warum wird meine Unicode-Zeichenfolge beschädigt, wenn sie von Java Applet an Java Script übergeben wird?

8

Ich bin ziemlich neu, also sei nicht zu hart:)

Frage (tl; dr)

Ich stehe vor einem Problem, indem ich einen Unicode String von einem eingebetteten javax.swing.JApplet in einer Webseite an den Java Script Teil übergebe. Ich bin mir nicht sicher, ob das ein Fehler oder ein Missverständnis der beteiligten Technologien ist:

Problem

Ich möchte eine Unicode-Zeichenfolge von einem Java-Applet an Java Script übergeben, aber die Zeichenfolge wird durcheinander gebracht. Seltsamerweise tritt das Problem nicht in Internet Explorer 10 auf, sondern in Chrome (v26) und Firefox (v20) . Ich habe jedoch andere Browser nicht getestet.

Der zurückgegebene String scheint in Ordnung zu sein, mit Ausnahme des letzten Unicode-Zeichens. Das Ergebnis im Java Script Debugger und auf der Webseite wäre:

  • abc → abc
  • 表示 → 表
  • ま → ま
  • ウ ォ ッ チ リ ト → ウ ォ ッ チ リ
  • ア ッ ッ プ ド ド → ア ッ プ / / /
  • ホ →
  • ホ → ホ (nicht deterministisch)
  • ア ッ プ ロ ド ド abc → ア ッ プ ロ ド ド ド abc

Die Zeichenfolge scheint bei den letzten Bytes beschädigt zu sein. Wenn es mit einem ASCII-Zeichen endet, ist die Zeichenfolge in Ordnung. Zusätzlich tritt das Problem nicht in jeder Kombination auf und auch nicht jedes Mal (nicht sicher). Daher vermute ich einen Fehler und ich befürchte, ich könnte eine ungültige Frage stellen.

Test einrichten

Ein minimalistisches Setup enthält ein Applet, das einige Unicode-Strings (UTF-8) zurückgibt:

%Vor%

Die entsprechende Webseite mit Java Script könnte so aussehen:

%Vor%

Umgebung

Ich arbeite an Windows 7 32-Bit mit der aktuellen Java Version 1.7.0_21 mit dem "Next Generation Java Plug-in 10.21.2 für Mozilla Browser". Ich hatte einige Probleme mit der Ländereinstellung meines Betriebssystems, aber ich habe mehrere (Englisch, Japanisch, Chinesisch) regionale Einstellungen versucht.

Im Falle einer beschädigten Zeichenfolge zeigt chrome ungültige Zeichen an (z. B. ). Firefox hingegen löscht den String komplett, wenn er mit enden würde.

Internet Explorer kann die Zeichenfolgen korrekt anzeigen.

Lösungen?

Ich kann mir mehrere Problemumgehungen vorstellen, darunter das Entkommen / Unescaping und das Hinzufügen eines "letzten Char", das dann über Java Script entfernt wird. Eigentlich möchte ich gegen Androids Webkit schreiben und habe es dort nicht getestet.

Da ich weiterhin in Chrome testen möchte (wegen der Webkit-Technologie und des Komforts), hoffe ich, dass es eine triviale Lösung für das Problem gibt, die ich vielleicht übersehen habe.

    
Inuniku 03.05.2013, 13:22
quelle

4 Antworten

1

Wenn Sie in Chrome / Firefox testen

Bitte ersetzen Sie die erste Zeile mit dieser und testen Sie sie dann,

%Vor%

Der Doctype hat einen signifikanten Wert, während der Browser die Seite identifiziert.

Übergänge / verlieren Sie die Typen, die Sie mit Unicode verwenden können. Bitte testen und antworten ..

    
MarmiK 08.05.2013 09:10
quelle
1

Ich schlage vor, einen Haltepunkt auf

zu setzen %Vor%

und prüfen Sie den Text in der JavaScript-Konsole, z. mit

%Vor%

oder

%Vor%

oder

%Vor%

Siehe auch

Ссылка

Ссылка (das nicht zu einem Standard gehört)

und

Ссылка

oder ähnliche Ressourcen.

Ihre Quelldateien haben möglicherweise nicht die von Ihnen angenommene Kodierung (UTF-8).

JavaScript setzt UTF-16-Zeichenfolgen voraus:

Ссылка

Java geht auch von UTF-16 aus:

Ссылка

Der Befehl Linux oder Cygwin file kann Ihnen die Kodierung Ihrer Dateien anzeigen.

Siehe

Ссылка (habe keine kernel.org man-Referenz gefunden)

    
stackunderflow 08.05.2013 10:12
quelle
1

Sie müssen sicherstellen, dass Sie Ihrem Applet / embed-Tag das folgende Java-Argument hinzufügen:

-Dfile.encoding = utf-8

d. java_arguments="- Dfile.encoding = utf-8"

Andernfalls wird das Applet als ASCII-Text erwartet und behandelt.

    
Dermot Doherty 31.05.2013 10:01
quelle
0

Okay, ich bin etwas beschämt, weil ich dachte, ich habe es genug versucht: Ich habe tatsächlich nicht-lateinische Locale verwendet (zB Chinesisch (VR China) oder Japanisch (Japan) im Windows-System Gebietsschemaeinstellungen Wenn ich zu zurückwechsle Englisch (USA) oder Deutsch (Deutschland) alles funktionierte wie erwartet.

Ich frage mich immer noch, warum Chrome & amp; Mozilla auf solch seltsame Weise, weil Java und moderne Browser Unicode-basiert sein sollten; Also werde ich das nicht als Antwort akzeptieren! Das Problem tritt wieder auf, wenn ich auf Japanisch zurückwechsle, und ich werde es auf verschiedenen Systemen testen.

Ich möchte mich für alle Plakate für die Aufklärung bedanken ... und ich werde mich noch bemühen, diese Frage zu lösen.

    
Inuniku 08.05.2013 20:13
quelle