Chỉ định encode (mã hóa) khi biên dịch chương trình Java | Laptrinhcanban.com

Chỉ định encode (mã hóa) khi biên dịch chương trình Java

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:

https://docs.oracle.com/

Các bộ encode cơ bản được Java hỗ trợ

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 APIjava.io/java.lang APIÝ nghĩa
US-ASCIIASCIIAmerican Standard Code for Information Interchange
UTF-8UTF8Eight-bit Unicode (or UCS) Transformation Format
windows-1258Cp1258Windows 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 APIjava.io/java.lang APIÝ nghĩa
US-ASCIIASCIIAmerican Standard Code for Information Interchange
UTF-8UTF8Eight-bit Unicode (or UCS) Transformation Format
EUC-JPEUC_JPJISX 0201, 0208 and 0212, EUC encoding Japanese
Shift_JISSJISShift-JIS, Japanese
windows-31jMS932Windows 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
javac -J-Dfile.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{
public static void main(String[] args){
System.out.println("こんにちは");
}
}
```

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:

```html
javac Sample.java

Chỉ định encode khi biên dịch chương trình 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:

Chỉ định encode khi biên dịch chương trình Java

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:

Chỉ định encode khi biên dịch chương trình Java

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.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.