Dateinamen und UTF-8



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

.



Relevant Pages

  • Re: Indagine (piccola)
    ... > o sono Mac OS X oppure comunque basate su Linux;-) ... forse visto che VMWare non lo regalano val la pena solo per chi si trova ... Prev by Date: ... Next by Date: ...
    (it.comp.macintosh)
  • Re: Umstieg von Debian-Linux auf MacOSX
    ... (habe seit ein paar Tagen einen Mini) ... > Hat jemand erfahrung mit dem Umstieg von Linux auf Mac? ... Prev by Date: ... Next by Date: ...
    (de.comp.sys.mac.misc)
  • Re: X Windows bzw API
    ... Windoof "war ja auch mal ... Ich hab Linux immer als Root betrieben, ... Prev by Date: ... Next by Date: ...
    (de.comp.lang.forth)
  • Re: Linux auf Risc?
    ... einfach eine zweite Platte einschieben und auf der Linux ... Prev by Date: ... Next by Date: ...
    (de.comp.os.unix.linux.misc)
  • Re: Warnung vor Sicherheitsluecke in Windows Bild- und Faxanzeige!
    ... Ein schlankes Linux läuft auch auf alten Rechnern flink, ... seit ich mir wieder einmal die Registry von Windows angeschaut habe ... Prev by Date: ... Next by Date: ...
    (microsoft.public.de.german.win98.allgemein)