javac如何处理Unicode符号?
我尝试了javac如何处理Unicode符号?,java,unicode,javac,Java,Unicode,Javac,我尝试了System.out.println(“ñ”)并打印ñ。为什么javac没有运行错误?可以将javac配置为具有源文件编码。这样,您可以将字符文字(和符号名称!)与非ASCII字符一起使用 如果这与文件编码的实际内容相匹配,那么一切都很好 如果没有,您可能会得到一个错误,但更可能的是,只是一些断开的字符串 为了再次打印文本,程序还需要知道打印时使用的编码。所有这些都需要正确配置(Java中的默认值是不可移植的),否则您可以获得各种中断的文本输出。Javachar和String本机使用UT
System.out.println(“ñ”)代码>并打印ñ
。为什么javac没有运行错误?可以将javac配置为具有源文件编码。这样,您可以将字符文字(和符号名称!)与非ASCII字符一起使用
如果这与文件编码的实际内容相匹配,那么一切都很好
如果没有,您可能会得到一个错误,但更可能的是,只是一些断开的字符串
为了再次打印文本,程序还需要知道打印时使用的编码。所有这些都需要正确配置(Java中的默认值是不可移植的),否则您可以获得各种中断的文本输出。Javachar
和String
本机使用UTF-16。它可以处理“ñ”和“ñ”
(部分地)说
Java编程语言使用UTF-16编码以16位代码单元的序列表示文本
这是一个扩展,通过它可以解释
原始Unicode字符流使用以下三个词汇转换步骤转换为一系列标记,这三个步骤依次应用:
将原始Unicode字符流中的Unicode转义()转换为相应的Unicode字符。格式为\uxxx的Unicode转义,其中xxxx是十六进制值,表示编码为xxxx的UTF-16代码单元。此翻译步骤允许任何程序仅使用ASCII字符表示
将步骤1产生的Unicode流转换为输入字符流和行终止符()
将步骤2产生的输入字符流和行终止符转换成一系列输入元素(),这些输入元素在空格()和注释()被丢弃后,由作为句法语法()终端符号的标记()组成
对。但这并不能解释编译器如何处理它。源文件很可能不是UTF-16格式。@Thilo添加了JLS-3.2,解释了词法结构。哇,符号名称类似于带波浪号的小写字母n
?当然<代码>字符串ñ=“ñ”
。不过,我建议不要这样做,对于类名(那些需要进入文件系统的名称,可能很容易被破坏),这两个答案都很有用。先生,这是您的一个很好的选择。@JigarJoshi我以为javac会坚持使用类似ASCII的字符以便于处理。@b16db0:不,javac可以处理很多字符集,默认情况下它使用平台默认编码。