Hướng dẫn cáchchỉ định encode (mã hóa) khi biên dịch chương trình Java. Khi biên dịch một chương trình Java, nếu encode (mã hóa) sử dụng trong file chứa mã nguồn chương trình khác với encode mặc định trong môi trường chạy chương trình đó, thì bạn phải chỉ định encode khi biên dịch chương trình Java để tránh xảy ra lỗi khi in kết quả chương trình.
Chỉ định encode (mã hóa) khi biên dịch chương trình Java
Java đặt encode (mã hóa) mặc định trong thuộc tính file.encoding cho từng môi trường thực thi, và nếu bạn lưu tệp nguồn bằng một encode khác với encode mặc định này, bạn phải chỉ định encode khi biên dịch chương trình.
Chúng ta sử dụng tùy chọn -encoding của javac để chỉ định encode khi biên dịch với cú pháp sau đây:
javac -encoding CharacterCode filename.java
Trong đó CharacterCode
là tên mã encode mà bạn đã sử dụng khi lưu mã nguồn trong file filename.java
.
Ví dụ:
javac -encoding UTF-8 Sample.java |
Lại nữa, chúng ta cũng có thể chỉ định encode khi biên dịch chương trình Java theo cách sau đây:
javac -J-Dfile.encoding = CharacterCode filename.java
Ví dụ:
javac -J-Dfile.encoding = UTF-8 Sample.java |
Các bộ encode cơ bản có thể sử dụng trong Java
Với bản JDK hiện tại (JDK 17) thì chúng ta có thể kiểm tra danh sách các bộ encode ký tự cơ bản được Java hỗ trợ tại đường trang chủ sau:
Trong đó chúng ta cần quan tâm tới 3 bộ encode ký tự liên quan tới tiếng Việt sau đây:
java.nio API | java.io/java.lang API | Ý nghĩa |
---|---|---|
US-ASCII | ASCII | American Standard Code for Information Interchange |
UTF-8 | UTF8 | Eight-bit Unicode (or UCS) Transformation Format |
windows-1258 | Cp1258 | Windows Vietnamese |
Đối với các bạn ở Nhật thì chúng ta cần quan tâm thêm các bộ encode ký tự liên quan tới tiếng Nhật bao gồm:
java.nio API | java.io/java.lang API | Ý nghĩa |
---|---|---|
US-ASCII | ASCII | American Standard Code for Information Interchange |
UTF-8 | UTF8 | Eight-bit Unicode (or UCS) Transformation Format |
EUC-JP | EUC_JP | JISX 0201, 0208 and 0212, EUC encoding Japanese |
Shift_JIS | SJIS | Shift-JIS, Japanese |
windows-31j | MS932 | Windows Japanese |
Có thể thấy cùng một bộ encode nhưng cách viết sẽ khác nhau trong các API, tuy nhiên thì chúng ta sử dụng kiểu nào cũng OK cả.
Ví dụ cụ thể về cách dùng các bộ encode này khi biên dịch chương trình, với một file HelloWorld.java chứa mã nguồn chương trình Java được lưu với bảng mã UTF-8 thì chúng ta có thể sử dụng một trong hai cách dưới đây để tiến hành compile nó.
javac -encoding UTF-8 HelloWorld.java |
Ví dụ cụ thể
Sau đây chúng ta sẽ cùng thực hành chỉ định encode khi biên dịch chương trình Java chứa tiếng Nhật như sau.
Hãy lưu lại chương trình Java sau với tên là Sample.java, với encode khi lưu là UTF-8.
class Sample{ |
Do encode UTF8 sử dụng trong chương trình khác với encode mặc định MS932 của Windows 10, nên sau khi compile và chạy chương trình, các ký tự in ra màn hình sẽ bị vỡ như sau:
javac Sample.java |
Để tránh chữ bị vỡ như vậy, chúng ta cần phải chỉ định mã hóa encode UTF8 khi biên dịch chương trình như sau:
javac -encoding UTF-8 Sample.java |
Lần này thì chữ tiếng Nhật không còn bị vỡ nữa mà sẽ hiển thị như sau:
Tương tự thì chúng ta cũng có thể sử dụng cách biên dịch kèm chỉ định encode như sau:
javac -J-Dfile.encoding=UTF-8 Sample.java |
Kết quả thì chữ cũng không bị vỡ khi in ra như sau:
Tổng kết
Trên đây Kiyoshi đã hướng dẫn bạn về cách chỉ định encode khi biên dịch chương trình Java rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.
Và hãy cùng tìm hiểu những kiến thức sâu hơn về Java trong các bài học tiếp theo.
URL Link
HOME › java cơ bản cho người mới bắt đầu>>05. cài đặt mã hoá trong java