Verwendung von Java 6 8-Bit-Zeichen aus einem String zu erhalten:String.getBytes ("ISO-8859-1") gibt mir 16-Bit-Zeichen auf O X
System.out.println(Arrays.toString("öä".getBytes("ISO-8859-1")));
gibt mir, auf Linux: [-10, 28] aber OS XI erhalten: [63, 63, 63, -89]
Ich scheine das gleiche Ergebnis zu erhalten, wenn ich die fantastische neue nio CharSetEncoder-Klasse verwende. Was mache ich falsch? Oder ist es Apples Schuld? :)
Es scheint MacRoman ist die Standard-Codierung auf meinem OSX-System. Die Quelldatei mit diesem Literal ist in UTF-8 codiert und analysiert sie fälschlicherweise als MacRoman. Also, wie das zu beheben? Die Angabe von -coding UTF-8 scheint keine gute Option zu sein. Was, wenn ich ein paar gute alte ISO-8859-1-Dateien habe? – lennartcl
Wenn einige Ihrer Dateien ISO-8859-1 sind, müssen Sie sie trotzdem separat kompilieren und * diese * Kodierung angeben. Ich schlage vor, dass Sie immer UTF-8 angeben, sowohl zum Speichern als auch zum Kompilieren. Wenn sich eine MacRoman- oder ISO-8859-1-Datei einschleicht, wissen Sie darüber Bescheid, wenn die Kompilierung fehlschlägt. Es ist viel schwieriger, UTF-8 so zu manipulieren, dass gefälschte Daten akzeptiert werden als bei den meisten anderen Kodierungen. –
Ich dachte, es würde zu ISO-8859-1 wechseln, wenn es eine Datei nicht als UTF-8 lesen könnte. Aber das scheint auf meiner Linux-Box nicht der Fall zu sein. Also '-encoding utf-8' gibt das gleiche Verhalten. Ich fühle mich immer noch nicht ganz wohl bei der Verwendung dieses Schalters, aber mir ist klar, dass ich es auf meiner OSX-Box und ähnlichen Systemen reparieren muss. Ich kann nicht helfen, aber wundere mich, wenn es keine globale "Lösung" gibt, so wird mein System nicht das nächste Mal explodieren, wenn ich auf ein Projekt, das UTF-8 String-Literale verwendet, und ich habe keinen Komponententest um das Problem zu bekommen? – lennartcl