2008-09-17 37 views
9

Có cách nào để thay đổi mã hóa được sử dụng bởi hàm tạo chuỗi (byte []) không?Thay đổi mã hóa mặc định cho Chuỗi (byte [])

Trong mã của riêng tôi, tôi sử dụng String (byte [], String) để chỉ định mã hóa nhưng tôi đang sử dụng thư viện bên ngoài mà tôi không thể thay đổi.

String src = "with accents: é à"; 
byte[] bytes = src.getBytes("UTF-8"); 
System.out.println("UTF-8 decoded: "+new String(bytes,"UTF-8")); 
System.out.println("Default decoded: "+new String(bytes)); 

Kết quả của việc này là:

UTF-8 decoded: with accents: é à 
Default decoded: with accents: é à 

Tôi đã cố gắng thay đổi hệ thống sở hữu file.encoding nhưng nó không hoạt động.

Trả lời

7

Bạn cần thay đổi ngôn ngữ trước khi khởi chạy JVM; xem:

Java, bug ID 4163515

Một số nơi dường như ngụ ý bạn có thể làm điều này bằng cách thiết lập các biến file.encoding khi khởi chạy JVM, chẳng hạn như

java -Dfile.encoding=UTF-8 ... 

... nhưng tôi đã không cố gắng điều này bản thân mình. Cách an toàn nhất là đặt biến môi trường trong hệ điều hành.

+0

Có ai đã thử phương pháp tiếp cận -Dfile.encoding không? Nó sẽ là tuyệt vời để có thể làm điều này một cách nền tảng bất khả tri. –

+0

@MattPassell Chúng tôi sử dụng các arg sau đây khi khởi chạy JVM để đảm bảo rằng chúng tôi chỉ định UTF-8 đúng ở mọi nơi: -Dfile.encoding = ISO646-US -Dsun.jnu.encoding = ISO646-US và có vẻ hoạt động tốt. –

+0

Cảm ơn bạn đã phản hồi. Tui bỏ lỡ điều gì vậy? Tôi chỉ google cho ISO646-US và phát hiện ra nó là một tên chính thức cho ASCII. Làm thế nào để giúp đảm bảo rằng bạn đang sử dụng UTF-8? –

1

Quoted from defaultCharset()

Các charset mặc định được xác định quá trình khởi động máy ảo và thường phụ thuộc vào miền địa phương và charset của cơ bản hệ điều hành .

Trong hầu hết các hệ điều hành, bạn có thể đặt bộ ký tự bằng biến môi trường.

+0

Không thực sự là câu trả lời tôi hy vọng (tôi có thể thích để có thể làm điều đó tự động). Đưa ra một mẫu làm thế nào để thay đổi mã hóa cho các hệ điều hành lớn sẽ là tuyệt vời. Cảm ơn – Michel

1

Tôi nghĩ bạn muốn điều này: System.setProperty ("file.encoding", "UTF-8");

Nó giải quyết được một số vấn đề, nhưng tôi vẫn còn một số vấn đề khác. Các ký tự "í" và "Í" không chuyển đổi chính xác nếu SO là ISO-8859-1. Chỉ với tùy chọn JVM khi khởi động, tôi đã giải quyết nó. Bây giờ chỉ cần Java Console của tôi trong NetBeans IDE đang gặp charset khi hiển thị các ký tự đặc biệt.

Các vấn đề liên quan