Internationalization enhancements ใน Java 9 รวมถึง Unicode 8.0 UTF-8 properties files และการเปิดใช้งาน CLDR locale data โดยค่าเริ่มต้น Java 9 รองรับถึง Unicode 8.0 standards ด้วย 10,555 characters, 29 scripts, และ 42 blocks
Properties Files Encoding
ใน Java 9 properties files โหลดด้วย UTF-8 encoding โดยค่าเริ่มต้น การอ่าน input stream โดยค่าเริ่มต้นอาจโยน MalformedInputException หรือ UnmappableCharacterException ในกรณีนี้ PropertyResourceBundle instance จะ reset สถานะก่อน exception อ่าน input stream ใหม่ใน ISO-8859-1 และดำเนินการต่อ
หากตั้งค่า PropertyResourceBundle.encoding เป็น ISO-8859-1 หรือ UTF-8 แล้ว PropertyResourceBundle จะอ่าน input stream ใน encoding นั้น และโยน exception หากพบ invalid sequence System property อ่านและประเมินตอน initialize PropertyResourceBundle class การเปลี่ยนหรือลบ property ภายหลังไม่มีผล
กรณีระบุ ISO-8859-1
- ตัวอักษรที่แทนไม่ได้ใน ISO-8859-1 encoding ต้องแทนด้วย Unicode escapes
- ค่า encoding อื่นๆ จะถูก ignore system property นี้
ตัวเลือกหากมีปัญหา
- แปลง properties file เป็น UTF-8 encoding
- ระบุ runtime system property
java.util.PropertyResourceBundle.encoding=ISO-8859-1
สรุปการเปลี่ยนแปลง
| ฟีเจอร์ | Java 8 และก่อน | Java 9+ |
|---|---|---|
| Default locale data | JRE (COMPAT) | CLDR |
| Properties file encoding | ISO-8859-1 (default) | UTF-8 (default) |
| Unicode support | Unicode 6.0/7.0 | Unicode 8.0 |
| java.locale.providers default | JRE, SPI | CLDR, COMPAT, SPI |
การเปลี่ยนเป็น UTF-8 และ CLDR โดยค่าเริ่มต้น ทำให้ Java 9 รองรับ internationalization ได้ดีขึ้นและสอดคล้องกับมาตรฐานสากล