Ich habe einen Java-String, der das Unicode-Zeichen U+9996 enthält (das ist, was ich erhalte, wenn ich codePointAt()) tun).
Wenn ich mir das im Debugger-Ausdruckspanel (in Eclipse) ansehe, ist alles in Ordnung und es sieht aus wie " ". Wenn ich es jedoch auf der Konsole ausdrucke, erhalte ich einfach " ? ". Die Schriftart scheint nicht das Problem zu sein, denn ich habe versucht, sie anders einzustellen.
Mein eigentliches Problem ist, dass ich versuche, die Zeichenfolge in eine MySQL-Datenbank (mit utf8-Kodierung) zu setzen. Viele andere breite Zeichen werden in der Datenbank gut angezeigt, aber auch dieses und einige andere wie es als "? All das führt mich zu der Annahme, dass das Problem auf der Java-Seite liegt.
Bei der Suche nach diesem Fehler habe ich ein wenig gelernt über Unicode-Normalisierung und java.text. Normalisierer was in diesem Fall von Bedeutung sein könnte. Ich habe gelernt, dass U+9996 die kanonische Version von U+2FB8 ist. U+2FB8 hat jedoch genau die oben genannten Probleme in Bezug auf die Anzeige, und warum sollte ich zu einer nicht-kanonischen Darstellung wechseln wollen (selbst wenn ich es könnte, was ich nicht glaube)?
Jedenfalls habe ich einen möglichen Hinweis gefunden, den ich nicht nachvollziehen kann. Diese Seite enthält die Worte "U+9996 ist kein gültiges Unicode-Zeichen", ohne weitere Erklärung. Dann wird gezeigt, wie dieses angeblich ungültige Unicode-Zeichen in verschiedenen Unicode-Kodierungen kodiert werden kann. Meine Frage ist also im Grunde folgende: WTF?
UPDATES
- Ich arbeite mit einem Mac.
- Ich spreche von der Eclipse-Konsole.
- Ich habe die Konsolenkodierung unter Ausführen > Allgemein auf UTF-8 gesetzt.
- Ich fügte hinzu
-Dfile.encoding=UTF-8
zu den JVM-Argumenten (der Standard war MacRoman) - Die Konsole (Eclipse und Terminal.app) zeigt jetzt die richtigen Zeichen an. Hurra!
- Ich bin vor allem daran interessiert, dass die Daten korrekt in die Datenbank gelangen, obwohl ich natürlich gerne ein umfassendes Verständnis dessen hätte, was hier vor sich geht.
- Ich glaube, ich habe das Datenbankproblem gelöst. Ich habe vergessen, die Kodierung für die Verbindung . Jetzt verstehe ich nicht, warum einige asiatische Charaktere durchkamen und andere nicht.
- Puh, Stackoverflow ist schnell. Es ist schwer, da mitzuhalten. Danke Leute.
0 Stimmen
U+9996 ist ein vollkommen gültiges Zeichen, es ist ein Han-Ideogramm. Siehe unicode.org/cgi-bin/GetUnihanData.pl?codepoint=9996
1 Stimmen
Wenn Sie Windows verwenden, ist die einzige Möglichkeit, Unicode-Zeichen in die Konsole zu schreiben, WriteConsoleW: msdn.microsoft.com/de-us/library/ms683458.aspx Der Java-Quellcode (OpenJDK 6) enthält keine Verweise auf WriteConsole, daher ist das Schreiben von Unicode-Zeichen in die Konsole von Java aus unmöglich.
0 Stimmen
Wie andere Poster schon sagten, ist der Char trotzdem gültig, er wird nur immer als ? auf der Konsole angezeigt.
0 Stimmen
Okay, ich sehe, Sie arbeiten mit einem Mac. Nun, die obigen Kommentare können für andere Leser bleiben, aber ich werde dir eine Antwort auf deinen Kommentar schreiben, wenn mir nicht andere zuvorkommen :-)
0 Stimmen
Rowan, hast du das Problem jemals gelöst? Ich habe ein ähnliches Problem, allerdings mit banaleren Symbolen, wie € und £ usw.