来自Java规范SE 7版
§3.1 Unicode
程序使用Unicode字符集编写。
§3.2 词汇翻译
使用以下三个词法转换步骤,将原始Unicode字符流转换为一系列标记.
我很困惑,因为我用我的本机字符编码(Windows-1252)编写了我的源代码,规范提到了(?)所有这些都从原始Unicode字符流开始,然后执行词法转换(包括Unicode转义转换)。
他们提到,Unicode转义可以用来包含仅使用ASCII字符的任何Unicode字符;如果执行先前的转换,我认为它们引用Unicode字符集子集中的ASCII字符,这是有意义的。
以前是否有将源文件写入Unicode的编码的转换?
有些信息与此相关,但我认为这更像是运行时的文本处理,而不是编译过程:
转换非Unicode文本
发布于 2012-08-16 20:59:48
基本上,规范的意思是,您只能在源文件中使用Unicode字符。它没有定义这些字符实际上是如何被编码成字节的,这取决于您和您正在使用的平台。
基本上,编译器内部的情况是,源文件作为字节流从磁盘读取,然后将这些字节转换为Java的Unicode字符的内部表示形式。它将源文件的原始字节转换为Unicode字符的方式基于传递给javac
的javac
选项。如果没有设置-encoding
选项,它将使用平台的默认编码。
现在还需要注意的是,在编译器将源代码字节转换成字符之后,它还会执行另一步,将字符文本(例如\u00a5123
)转换为适当的单个Unicode字符。这实际上是您在问题中引用的3.2节中提到的三个步骤中的第一个步骤。这样,就可以只使用普通的ASCII字符来表示源中的任何Unicode字符。
https://stackoverflow.com/questions/11995021
复制相似问题