Ich habe Probleme zu verstehen, wie die IBM JVM-Implementierung von java.io.File
mit UTF-8 unter AIX im JFS2-Dateisystem umgeht. Ich vermute, dass es eine Systemeigenschaft gibt, die ich übersehen habe, aber ich konnte sie noch nicht finden.
Nehmen wir an, ich habe eine Datei namens othér
(wobei é
U + 00E9 oder UTF-8 Bytes 0xc3 0xa9
ist). Der Dateiname ist in UTF-8 codiert und wurde von einem C-Programm erstellt:
Wenn ich eine Java-Zeichenkette in Java erstelle, die für den Dateinamen repräsentativ ist, kann sie nicht geöffnet werden. Außerdem, wenn ich File.listFiles()
in Java verwende, besteht es darauf, dies als Latin1-String zu behandeln. Zum Beispiel:
Die Ergebnisse dieses Programms sind:
%Vor% So scheint es, dass meine Dateinamen als Latin1 behandelt werden. Ich habe versucht, die file.encoding
festzulegen Systemeigenschaft zu UTF8
und die client.encoding.override
Systemeigenschaft auf UTF-8
ohne Erfolg. Meine LANG
und LC_ALL
Einstellungen sind en_US.UTF-8
:
Die primäre Sprachumgebung meines Systems, wie von SMIT konfiguriert, ist "ISO8859-1". Ich weiß nicht genau, welche Auswirkungen diese Einstellung hat, aber ich kann sie nicht ändern. Ich vermute, dass, wenn ich könnte dies zu "UTF8 Englisch" ändern, dann kann das Problem beheben, aber da JFS2 Dateinamen in Unicode speichert und Java arbeitet in Unicode intern, ich fühle wie es sollte eine allgemeinere Lösung für das Problem sein.
Gibt es eine andere Systemeigenschaft für J9, die ich einstellen kann, die es zwingen wird, UTF-8-Dateinamen ungeachtet meiner SMIT-Einstellung zu verwenden?
AIX-Version ist 5.2, Java-Version ist IBM J9 (1.5.0), Dateisystem ist JFS2:
%Vor%Update: Dies geschieht immer noch auf Java6:
%Vor%Ich habe die Antwort gefunden. Ich versuche wirklich hier zu helfen.
Dies ist ein Blogbeitrag über Ihr tatsächliches Problem. Ich verspreche es.
Versuchen Sie, Ihr Programm mit dem gesetzten -Dsun.jnu.encoding=UTF-8
-Flag auszuführen.
Siehe Ссылка für eine Liste gültiger AIX-Gebietsschemata Ihre Exporte sollten so aussehen, wie ich denke
%Vor%