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中的默认值是不可移植的),否则您可以获得各种中断的文本输出。

Java
char
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可以处理很多字符集,默认情况下它使用平台默认编码。