2

適切な Windows の各国コードページ (たとえば cp1250 ) のファイル名で tar アーカイブを生成する Java のライブラリ/方法を知っていますか。

Java tar、サンプルコードで試しました:

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

うまくいきません。Windows で tar を抽出すると、各国の文字が壊れます。Linux では、ISO-8859-1 を使用した場合にのみ、ポーランド語の国別文字が正しく表示されるという奇妙なことも発見しました。

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

適切なポーランド語のコードページは ISO-8859-2 ですが、これも機能しません。Windows用のCp852も試しましたが、効果はありません。

tar 形式の制限は知っていますが、変更することはできません。

提案をありがとう、

4

2 に答える 2

1

公式には、TARはヘッダーで非ASCIIをサポートしていません。ただし、LinuxではUTF-8でエンコードされたファイル名を使用できました。

これを試してみてください、

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

これにより、少なくともCp1250のバイトがTARヘッダーに保持されます。

于 2009-09-29T11:57:12.060 に答える
0

tar は、ヘッダーに非 ASCII 値を許可しません。別のエンコーディングを試した場合、結果はおそらく、ターゲット プラットフォームがそれらのバイト値をどのように処理するかによって決定されます。ターゲット プラットフォームの tar プログラムがバイトを ISO-8859-1 として解釈しているように聞こえます。これが「機能する」理由です。

拡張属性をご覧ください。http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=5&manpath=FreeBSD+8-current

私はここの専門家ではありませんが、これが非 ASCII 値を tar ファイル ヘッダーに入れる唯一の公式な方法のようです。

于 2009-09-29T10:40:54.617 に答える