Frage

Haben Sie eine Bibliothek / Art und Weise in Java wissen tar-Archiv mit Dateinamen in der richtigen Fenster nationalen Zeichensatz (zB CP1250) zu erzeugen.

Ich habe versucht, mit Java tar , Beispielcode:

final TarEntry entry = new TarEntry( files[i] );
String filename = files[i].getPath().replaceAll( baseDir, "" );
entry.setName( new String( filename.getBytes(), "Cp1250" ) );
out.putNextEntry( entry );
...

Es funktioniert nicht. Umlaute sind gebrochen, wo ich Teer in den Fenstern zu extrahieren. Ich habe auch festgestellt, eine seltsame Sache, unter Linux polnischen National Zeichen gezeigt werden nur korrekt, wenn ich verwendet ISO-8859-1:

entry.setName( new String( filename.getBytes(), "ISO-8859-1" ) );

Trotz der Tatsache, dass die richtige polnische Zeichensatz ISO-8859-2, nicht zu arbeiten. Ich habe auch CP852 für Fenster, keine Wirkung versucht.

Ich weiß, dass die Grenzen des tar-Format, aber es ändert, ist keine Option.

Vielen Dank für die Anregungen,

War es hilfreich?

Lösung

Offiziell hat TAR keine Nicht-ASCII in Header unterstützen. Allerdings konnte ich UTF-8 kodierten Dateinamen auf Linux verwenden.

Sie sollten dies versuchen,

String filename = files[i].getName();
byte[] bytes = filename.getBytes("Cp1250")
entry.setName(new String(bytes, "ISO-8859-1"));
out.putNextEntry( entry );

Das zumindest bewahrt das Bytes in CP1250 in TAR-Header.

Andere Tipps

tar erlaubt keine Nicht-ASCII-Wert in seinem Header. Wenn Sie eine andere Codierung versuchen, ist das Ergebnis wahrscheinlich bis zu dem, was die Zielplattform entscheidet mit den Byte-Werten zu tun. Es Art von klingt wie Ihre Zielplattform Programm tar ist die Bytes als ISO-8859-1 zu interpretieren, weshalb die ‚funktioniert‘.

Haben Sie einen Blick auf die erweiterten Attribute? http://www.freebsd.org/ cgi / man.cgi? query = tar & Sektion = 5 & manpath = FreeBSD + 8-Strom

Ich bin kein Experte hier aber das scheint die einzige offizielle Weg, um alle Nicht-ASCII-Werte in einer tar-Datei-Header zu setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top