Domanda

Sai qualche libreria / modo in Java per generare archivio tar con i nomi dei file in apposite finestre tabella codici nazionali (ad esempio cp1250).

Ho provato con Java tar , esempio di codice:

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

Non funziona. caratteri nazionali sono rotte in cui ho estratto di catrame in finestre. Ho anche scoperto una cosa strana, in caratteri nazionali Linux polacchi vengono visualizzati correttamente solo quando ho usato ISO-8859-1:

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

Nonostante il fatto che una corretta tabella di codici polacca è ISO-8859-2, che non funziona troppo. Ho anche provato CP852 per le finestre, nessun effetto.

So che i limiti di formato tar, ma cambiando non è un'opzione.

Grazie per i suggerimenti,

È stato utile?

Soluzione

Ufficialmente, TAR non supporta non ASCII nelle intestazioni. Tuttavia, ero in grado di utilizzare UTF-8 nomi di file codificati su Linux.

Si dovrebbe provare questo,

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

Questa almeno conserva i byte in Cp1250 nelle intestazioni TAR.

Altri suggerimenti

tar non consente valori non ASCII nelle sue intestazioni. Se si cerca una codifica diversa, il risultato è probabilmente fino a che la piattaforma di destinazione decide di fare con quei valori di byte. E 'sorta di suoni come programma tar della vostra piattaforma di destinazione sta interpretando i byte come ISO-8859-1, ed è per questo che 'funziona'.

Date un'occhiata al attributi estesi? http://www.freebsd.org/ cgi / man.cgi? query = catrame & sektion = 5 & manpath = FreeBSD + 8-corrente

Non sono un esperto qui, ma questo sembra essere l'unico modo ufficiale per mettere tutti i valori non-ASCII in un file di intestazione tar.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top