組み込み Linux プラットフォームで小さな Java アプリケーションを実行しています。Java VM JamVM を OpenJDK に置き換えた後、特殊文字を含むファイル名が正しく保存されません。ウムラウトなどの特殊文字は疑問符に置き換えられます。
ここに私のテストコードがあります:
import java.io.File;
import java.io.IOException;
public class FilenameEncoding
{
public static void main (String[] args) {
String name = "umlaute-äöü";
System.out.println("\nname = " + name);
System.out.print("name in Bytes: ");
for (byte b : name.getBytes()) {
System.out.print(Integer.toHexString(b & 255) + " ");
}
System.out.println();
try {
File f = new File(name);
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
実行すると、次の出力が得られます。
name = umlaute-???
name in Bytes: 75 6d 6c 61 75 74 65 2d 3f 3f 3f
umlaute-??? という名前のファイル 創造された。
プロパティ file.encoding および sun.jnu.encoding を UTF-8 に設定すると、端末で正しい文字列が表示されますが、作成されたファイルは依然としてウムラウト ??? です。
VM を strace で実行すると、システム コールが表示されます
open("umlaute-???", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0666) = 4
これは、問題がファイル システムの問題ではなく、VM の問題であることを示しています。
ファイル名のエンコーディングはどのように設定できますか?