UTF-8 có phải là mã hóa mặc định trong Java không?
Nếu không, làm cách nào để biết mã hóa nào được sử dụng theo mặc định?Mã hóa mặc định của JVM là gì?
Trả lời
Nó sẽ phụ thuộc vào miền địa phương. Ngôn ngữ khác nhau, mã hóa mặc định khác nhau.
Tập ký tự mặc định của JVM là của hệ thống đang chạy. Không có giá trị cụ thể cho điều này và bạn không nên thường phụ thuộc vào mã hóa mặc định là bất kỳ giá trị cụ thể nào.
Bạn có thể truy cập vào thời gian chạy qua Charset.defaultCharset()
, nếu đó là bất kỳ sự sử dụng nào đối với bạn, mặc dù thực sự bạn nên đặt điểm luôn chỉ định mã hóa rõ ràng khi bạn có thể làm như vậy.
Nếu bạn đúng, tôi thấy nó có một chút lạ http://java.sun.com/javase/technologies/core/basic/intl/faq.jsp#text-representation nói rằng nó luôn là UTF-16. –
UTF-16 là cách văn bản được biểu diễn nội bộ trong JVM. Mã hóa mặc định xác định cách JVM diễn giải các byte đọc từ các tệp (ví dụ, sử dụng 'FileReader'). – JesperE
Câu trả lời này là đúng, nhưng để tham khảo, trên Linux thường là "UTF-8" và trên Windows thường là "cp1252". – Jeutnarg
Lưu ý rằng bạn có thể thay đổi mã hóa mặc định của JVM bằng cách sử dụng thuộc tính gây nhầm lẫn có tên file.encoding
.
Nếu ứng dụng của bạn đặc biệt nhạy cảm với mã hóa (có thể thông qua việc sử dụng API ngụ ý mã hóa mặc định), thì bạn nên đặt rõ ràng điều này khi khởi động JVM thành giá trị nhất quán (đã biết).
Lưu ý rằng 'file.encoding' phải được chỉ định khi khởi động JVM (tức là tham số cmdline -Dfile.encoding hoặc thông qua JAVA_TOOLS_OPTIONS); bạn có thể đặt nó trong thời gian chạy, nhưng nó sẽ không quan trọng. Xem http://stackoverflow.com/questions/361975/setting-the-default-java-character-encoding – sleske
Có ba "mặc định" mã hóa:
file.encoding:
System.getProperty("file.encoding")
java.nio.Charset:
Charset.defaultCharset()
Và mã hóa của InputStreamReader:
InputStreamReader.getEncoding()
Bạn có thể đọc thêm về nó trên this page.
Tôi chắc chắn rằng đây là JVM implemenation cụ thể, nhưng tôi đã có thể "ảnh hưởng" của tôi file.encoding mặc định JVM bằng cách thực hiện:
export LC_ALL=en_US.UTF-8
(chạy java phiên bản 1.7.0_80 trên Ubuntu 12.04)
Ngoài ra, nếu bạn nhập "ngôn ngữ" từ bảng điều khiển Unix, bạn sẽ thấy thêm thông tin tại đó.
Tất cả tín dụng sẽ chuyển đến http://www.philvarner.com/2009/10/24/unicode-in-java-default-charset-part-4/
Vì vậy, điều đó phụ thuộc vào việc mã hóa hệ điều hành máy chủ có? –