Xin chào và cảm ơn bạn đã đọc bài đăng của tôi.Biên dịch (javac) mã nguồn Java mã hóa UTF8 với BOM
Vấn đề của tôi là như sau: Tôi muốn biên dịch tệp nguồn Java bằng "javac" với tệp này được mã hóa UTF-8 bằng BOM (hệ điều hành là WinXP).
Dưới đây là những gì tôi làm:
1) Tạo một tập tin với "Notepad" và chọn bảng mã UTF-8
dos> notepad Test.java
"File -> Save as..."
File name : Test.java
Save as type: All Files
Encoding : UTF-8
Save
2) Tạo một lớp Java trong tập tin đó và lưu các tập tin giống như trong 1)
public class Test
{
public static void main(String [] args)
{
System.out.println("This is a test.");
}
}
3) Hình dung phiên bản hệ thập lục phân của tập tin (dòng đầu tiên)
dos> xxd Test.java | head -1
0000000: efbb bf70 7562 6c69 6320 636c 6173 7320 ...public class
Lưu ý: EF BB BF là UTF-8 mã hóa BOM (BOM UTF-16 mã hóa là FE FF).
4) Cố gắng biên dịch mã này với "javac"
dos> javac -encoding utf8 Test.java
Test.java:1: illegal character: \65279
?public class Test
^
1 error
Lưu ý: 65.279 là phiên bản thập phân của BOM.
Câu hỏi của tôi là như sau: làm thế nào tôi có thể làm cho công việc biên soạn này với:
- giữ nó UTF-8 mã hóa
- và giữ BOM?
Cảm ơn bạn đã trợ giúp và chúc mừng tốt đẹp nhất.
Lea
Đúng vậy: bạn phải xóa BOM. Nó không có kinh doanh trong UTF-8, do đó, tất nhiên nó là một lỗi. Đây là một lỗi Microsoft lâu đời. Không bao giờ đặt BOM vào UTF-8 !!!!! – tchrist
Xin chào. Cảm ơn bạn vì câu trả lời. Tôi đã sử dụng "Notepad ++" để mã hóa tệp dưới dạng "UTF8 không có BOM". Biên dịch mã bằng "javac" hiện hoạt động. –
@tchrist [Tiêu chuẩn Unicode (trang 30)] (http://www.unicode.org/versions/Unicode6.0.0/ch02.pdf) cho phép một BOM trong UTF-8, do đó bạn có mọi quyền đưa nó vào đó nếu bạn muốn. Tại sao bạn muốn là một câu chuyện khác, nhưng 'javac' nên xử lý nó. – ArtB