【发布时间】:2012-04-06 08:54:16
【问题描述】:
您好,感谢您阅读我的帖子。
我的问题如下:我想用“javac”编译一个 Java 源文件,这个文件是用 BOM 编码的 UTF-8(操作系统是 WinXP)。
以下是我的工作:
1) 使用“记事本”创建文件并选择 UTF-8 编码
dos> notepad Test.java
"File -> Save as..."
File name : Test.java
Save as type: All Files
Encoding : UTF-8
Save
2) 在该文件中创建一个 Java 类并像 1) 一样保存该文件
public class Test
{
public static void main(String [] args)
{
System.out.println("This is a test.");
}
}
3) 可视化文件的十六进制版本(第一行)
dos> xxd Test.java | head -1
0000000: efbb bf70 7562 6c69 6320 636c 6173 7320 ...public class
注意: ef bb bf 是 UTF-8 编码的 BOM(UTF-16 编码的 BOM 是 FE FF)。
4) 尝试用“javac”编译这段代码
dos> javac -encoding utf8 Test.java
Test.java:1: illegal character: \65279
?public class Test
^
1 error
注意:65279 是 BOM 的十进制版本。
我的问题如下:我怎样才能使这个编译工作:
- 保持 UTF-8 编码
- 并保留 BOM?
感谢您的帮助和最诚挚的问候。
莉亚
【问题讨论】:
-
没错:您必须删除 BOM。它在 UTF-8 中没有任何业务,所以它当然是一个错误。这是一个长期存在的微软错误。永远不要将 BOM 放入 UTF-8 中!!!!!!
-
你好。谢谢您的回答。我使用“Notepad++”将文件编码为“UTF8 without BOM”。现在可以使用“javac”编译代码了。
-
@tchrist The Unicode Standard (page 30) 允许使用 UTF-8 格式的 BOM,因此如果您愿意,您有权将其放在那里。为什么你想要是另一个故事,但
javac应该处理它。
标签: utf-8 javac byte-order-mark