您好,感谢您阅读我的文章。用BOM编译(javac)UTF8编码的Java源代码
我的问题如下:我想编译一个带有“javac”的Java源文件,该文件是用BOM(操作系统为WinXP)编码的UTF-8。
下面是我做的:
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
注:是BOM的十进制版本。
我的问题是:我怎样才能使这个编译工作:
- 保持它的UTF-8编码
- 并保持BOM?
谢谢你的帮助和问候。
LEA
是的:您必须删除BOM。它在UTF-8上没有任何业务,所以当然这是一个错误。这是一个长期存在的微软错误。永远不要把BOM放在UTF-8中!!!!! – tchrist 2012-03-21 20:56:42
你好。谢谢您的回答。 我使用“Notepad ++”将文件编码为“无BOM的UTF8”。 现在可以使用“javac”编译代码。 – 2012-03-22 09:20:09
@tchrist [Unicode标准(第30页)](http://www.unicode.org/versions/Unicode6.0.0/ch02.pdf)支持UTF-8中的BOM,因此您完全有权将它放在那里如果你愿意的话。为什么你想要另一个故事,但'javac'应该处理它。 – ArtB 2013-07-09 18:46:09