Tôi đang chạy một ứng dụng Java nhỏ trên nền tảng Linux nhúng. Sau khi thay thế Java VM JamVM bằng OpenJDK, tên tệp có các ký tự đặc biệt không được lưu trữ chính xác. Các ký tự đặc biệt như umlauts được thay thế bằng dấu chấm hỏi.Mã hóa tên tệp trong Java
Đây là mã thử nghiệm của tôi:
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();
}
}
}
Chạy nó mang lại kết quả như sau:
name = umlaute-???
name in Bytes: 75 6d 6c 61 75 74 65 2d 3f 3f 3f
và tập tin gọi là umlaute - ??? được tạo ra.
Đặt tệp thuộc tính.encoding và sun.jnu.encoding thành UTF-8 cung cấp các chuỗi chính xác trong thiết bị đầu cuối, nhưng tệp được tạo vẫn là umlaute - ???
Chạy máy ảo với strace, tôi có thể thấy các cuộc gọi hệ thống
open("umlaute-???", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0666) = 4
Điều này cho thấy, rằng vấn đề không phải là một vấn đề hệ thống tập tin, nhưng một trong những VM.
Làm cách nào để mã hóa tên tệp được đặt?
Hãy đi qua các liên kết để giải thích cách thiết lập mã hóa .. http://stackoverflow.com/questio ns/361975/setting-the-default-java-character-encoding – Phani
Cài đặt file.encoding không có tác dụng. Nó chỉ ảnh hưởng đến nội dung tập tin, nhưng không ảnh hưởng đến tên tập tin. –
Điều này có thể giúp bạn một chút .. http://stackoverflow.com/questions/1184176/how-can-i-safely-encode-a-string-in-java-to-use-as-a-filename – Phani