javac如何处理Unicode字形?

时间:2015-02-03 05:33:55

标签: java unicode javac

我尝试System.out.println("ñ");并打印ñ。为什么javac没有遇到错误?

2 个答案:

答案 0 :(得分:1)

Javac可以配置为具有源文件编码。这样,您可以将字符文字(和符号名称!)与非ASCII字符一起使用。

如果它与文件编码实际匹配,那么一切正常。

如果没有,您可能会收到错误,但更有可能是错误的字符串。

为了再次打印文本,程序还需要知道打印时要使用的编码。所有这些都需要正确配置(Java中的默认值不可移植),否则您可以获得各种破碎的文本输出。

答案 1 :(得分:1)

Java char String本身采用UTF-16格式。它可以处理'ñ'和“ñ”。

JLS-3.1. Unicode说(部分),

  

Java编程语言使用UTF-16编码表示16位代码单元序列中的文本。

JLS-3.2. Lexical Structure进行了扩展,解释了

  

使用以下三个词汇翻译步骤将原始Unicode字符流转换为一系列标记,这些步骤依次应用:

     
      
  1. 将Unicode字符的原始流中的Unicode转义(§3.3)转换为相应的Unicode字符。形式为\ uxxxx的Unicode转义,其中xxxx是十六进制值,表示编码为xxxx的UTF-16代码单元。此转换步骤允许任何程序仅使用ASCII字符表示。

  2.   
  3. 将步骤1产生的Unicode流转换为输入字符和行终止符流(§3.4)。

  4.   
  5. 将步骤2生成的输入字符和行终止符流转换为输入元素序列(§3.5),在空格(§3.6)和注释({{ {3}})被丢弃,包含作为句法语法(§3.7)终结符号的标记(§3.5)。

  6.