程序是如何用 Unicode 编写的?

nEA*_*nam 2 java unicode javac character-encoding

来自 Java 规范 SE 7 版

\n\n

\xc2\xa73.1 Unicode

\n\n
\n

程序是使用 Unicode 字符集编写的。

\n
\n\n

\xc2\xa73.2词汇翻译

\n\n
\n

使用以下三个词汇翻译步骤将原始 Unicode 字符流翻译为\n 标记序列...

\n
\n\n

我很困惑,因为我用本机字符编码(Windows-1252)编写源代码,并且规范提到(?)全部从原始 Unicode 字符流开始,然后词法翻译(包括 Unicode 转义转换)是执行。

\n\n

他们提到 Unicode 转义可用于包含任何使用\仅 ASCII 字符的 Unicode 字符;如果执行了之前的转换,我认为它们引用的是 Unicode 字符集子集中的 ASCII 字符,这是有道理的。

\n\n

之前是否有从用于写入源文件的编码到 Unicode 的转换?

\n\n

一些相关信息,但我认为这更像是运行时的文本处理,而不是编译过程:

\n\n

转换非 Unicode 文本

\n

Mik*_*eck 5

基本上,规范所说的是您只能在源文件中使用 Unicode 字符。它没有定义这些字符实际上如何编码为字节,这取决于您和您正在使用的平台。

基本上,编译器内部发生的事情是从磁盘读取源文件作为字节流,然后将这些字节转换为 Java 的 Unicode 字符的内部表示形式。它将源文件的原始字节转换为 Unicode 字符的方式基于-encoding传递给 的选项javac。如果未-encoding设置选项,它将使用您平台的默认编码。

现在还需要注意的是,编译器将源代码字节转换为字符后,它会执行另一个步骤将字符文字(例如\u00a5123)转换为适当的单个 Unicode 字符。这实际上是您在问题中引用的第 3.2 节中引用的三个步骤中的第一个。这样,就可以只使用纯 ASCII 字符来表示源中的任何 Unicode 字符。

  • 使用转义序列的 @RobertMarkBram Hello World 程序:http://ideone.com/EqD25 (2认同)
  • \u0057\u0068\u0079\u0020\u0077\u006F\u0075\u006C\u0064\u0020\u0079\u006F\u0075\u0020\u0077\u0061\u006E\u0074\u0020\u0074\u00 6F\u0020\u0064\u006F\u0020 \u0074\u0068\u0061\u0074\u003F (2认同)