Dateinamen und UTF-8
- From: Sönke Müller-Lund <soenke.mueller-lund@xxxxxxxxxxx>
- Date: Wed, 03 Aug 2005 12:22:00 +0200
Moin,
folgende Situation:
jdk 1.5.04, Linux, LANG=de_DE@euro
-----------8<-----------------------
package de.muellerlund.test.encoding;
import java.io.IOException;
import java.io.FileOutputStream;
import java.nio.charset.Charset;
public class EncodingTest
{
public static void main(String[] args) throws Exception {
System.out.println(Charset.defaultCharset());
createFileInternal("\u00A9_1.txt"); // (c)-Zeichen
createFileExternal("\u00A9_2.txt"); // dto
}
private static void createFileExternal(String s)
throws IOException, InterruptedException {
ProcessBuilder aBuilder = new ProcessBuilder("touch", s);
aBuilder.redirectErrorStream(true);
Process p = aBuilder.start();
p.waitFor();
}
private static void createFileInternal(String s) throws IOException {
new FileOutputStream(s).close();
}
}
-----------8<-----------------------
Die Ausgabe, bzw. das Ergebnis ist abhängig von Charset.defaultCharset()
welche auf das Property "file.encoding" horcht und die Namen der erzeugten
Dateien sind abhängig von der Art, wie sie erzeugt werden.
(Die Sicht in der Console ist stets iso-8859-15)
$ java -Dfile.encoding=iso8859-1 de.muellerlund.test.encoding.EncodingTest
=> ISO-8859-1
$ ls *.txt
=> ©_1.txt ©_2.txt
So weit, so gut!
$ rm *.txt
$ java -Dfile.encoding=utf-8 de.muellerlund.test.encoding.EncodingTest
=> UTF-8
$ ls *.txt
=> ©_1.txt ©_2.txt
Aha, nur der zweite Name wird "richtig" erzeugt (Remember: ISO Sicht), d.h.
über den ProcessBuilder bekommt Linux die UTF-8 kodierte Bytefolge, obwohl
Prozesse gar nichts mit Dateierzeugung (also "file.encoding") zu tun haben.
Ich möchte aber insbesondere, dass über FileOutputStream richtig kodiert
wird.
Zweites Problem:
In einer Applikation werden Dateien von Prozessen erzeugt und die Dateinamen
können Unicode-Zeichen wie oben enthalten. Ob die Dateinamen nun UTF-8 oder
ISO kodiert sind, kann innerhalb der Applikation leider nicht gesteuert
werden (System.setProperty() ist wirkungslos), da die Klasse Charset keine
setDefault-Methode besitzt.
Bug or Feature?
Sönke
.
- Prev by Date: Re: Http und Redirects
- Next by Date: Re: [OT] Dokumentation erstellen
- Previous by thread: [eclipse] dll hinzufügen
- Next by thread: Kann man auf mehrere Objekte warten?
- Index(es):
Relevant Pages
|