一些编译器失败的在Javadoc和源代码注释非ASCII字符。 什么是Java源文件的电流(Java 7中)和将来(的Java 8及以后)的做法相对于Unicode的? 是否有IcedTea项目,OpenJDK的,和其他Java环境之间的差异,是什么决定的语言规范? 如果所有非ASCII字符的JavaDoc进行转义使用HTML 和逃脱的。 样的代码? 但是,什么是评论等同于Java的//?
更新 :评论表明,人们可以使用任何字符集,以及一旦编译一个需要指出哪些字符集是在源文件中使用。 我会考虑这一点,将寻找如何通过Ant,Eclipse和Maven的配置此细节。
一些编译器失败的在Javadoc和源代码注释非ASCII字符。
这可能是因为编译器假定输入是UTF-8,并有在源文件中无效UTF-8的序列。 这些似乎是在你的源代码编辑点评是无关紧要,因为词法分析器(从其他标记区分评论)不会继续运行。 而工具试图字节转换成字符词法分析器运行前发生的故障。
该man
对页面javac
和javadoc
说
-encoding name
Specifies the source file encoding name, such as
EUCJIS/SJIS. If this option is not specified, the plat-
form default converter is used.
因此运行javadoc
与编码标志
javadoc -encoding <encoding-name> ...
更换后的<encoding-name>
与您已经用了你的源文件的编码应使其使用正确的编码。
如果你有一组需要一起编译源文件中使用一个以上的编码,你需要修复的第一和定居在一个统一的编码对所有的源文件。 你真的应该只使用UTF-8还是坚持ASCII。
什么是Java源文件的电流(Java 7中)和将来(的Java 8及以后)的做法相对于Unicode的?
该算法与源文件在处理Java是
- 收集字节
- 字节转换为使用一些编码字符(UTF-16编码单元)。
- 替换的所有序列
'\\'
'u'
,接着用对应于这些十六进制数字的代码单元4个十六进制数字。 错误了,如果有一个"\u"
不跟四个十六进制数字。 - 莱克斯的字符为标记。
- 解析标记为类。
在当前和前的做法是,步骤2中,转换字节为UTF-16代码单元,高达对于加载编译单元(源文件),但命令行界面的实际标准工具是使用-encoding
标志。
该转换发生之后,将语言的任务即\uABCD
样式序列文法和解析之前转换为UTF-16代码单元(步骤3)。
例如:
int a;
\u0061 = 42;
是一个有效的对Java语句的。 任何Java源代码工具必须,字节转换成字符,但在解析之前后,查找\ uABCD序列,并将其转换,从而该代码被转换为
int a;
a = 42;
前解析。 这种情况无论在哪里\ uABCD顺序发生的。
这个过程看起来像
- 得到字节:
[105, 110, 116, 32, 97, 59, 10, 92, 117, 48, 48, 54, 49, 32, 61, 32, 52, 50, 59]
- 字节转换为字符:
['i', 'n', 't', ' ', 'a', ';', '\n', '\\', 'u', '0', '0', '6', '1', ' ', '=', ' ', '4', '2', ';']
- 替换Unicode转义:
['i', 'n', 't', ' ', 'a', ';', '\n', a, ' ', '=', ' ', '4', '2', ';']
- 莱克斯:
["int", "a", ";", "a", "=", "42", ";"]
- 解析:
(Block (Variable (Type int) (Identifier "a")) (Assign (Reference "a") (Int 42)))
如果所有非ASCII字符的JavaDoc进行转义使用HTML和逃生;般的代码?
无需除HTML特殊字符,如'<'
要在文档中出现字面上。 您可以使用\uABCD
javadoc注释里面的序列。 Java进程\u....
解析源文件,使他们能够出现内部字符串,注释,任何地方真的了。 这就是为什么
System.out.println("Hello, world!\u0022);
是一个有效的Java语句。
/** @return \u03b8 in radians */
相当于
/** @return θ in radians */
至于javadoc的关注。
但是,这将是在Java //
评论等同?
您可以使用//
注释Java编写,但只的Javadoc看起来里面/**...*/
的文档注释。 //
注释不携带的元数据。
Java的处理的一个分枝\uABCD
序列是,尽管
// Comment text.\u000A System.out.println("Not really comment text");
看起来像一个单行注释,和许多IDE将突出它是这样,它不是。
作为评论者指示的,源文件的编码可以被传递到(至少一些)编译器。 在这个答案,我会总结如何将此信息传递。
日食
蚀(3.7选中)不需要任何特殊的配置,你可以愉快地使用Java源代码,如:
double π = Math.PI;
蚂蚁
<javac encoding="UTF-8" ... >
</javac>
Java的
javac -encoding UTF-8 src/main/Foo.java