gpt4 book ai didi

java - 读取 java 源文件时使用什么字符集?

转载 作者:行者123 更新时间:2023-11-30 06:53:25 25 4
gpt4 key购买 nike

我正在读这个

Should source code be saved in UTF-8 format

我正在使用 eclipse 编译器库,但需要读取一些 java 源文件以将其提供给该库。它似乎可以以与该帖子不同的格式存储。

有没有一种我可以用来读取它的字符集,这样它每次都能正常工作。 Charset.forName("UTF-8") 也许吧?

谢谢,院长

最佳答案

字符编码不同

任何工具都可以编写任何编码的 Java 源代码。即使是 .java 文件的想法也不是由 Java Language Spec 定义的.任何IDE可以使用任何编码以任何方式保留 Java 源代码。

这些工具负责最终向编译器工具链提供符合 Unicode 标准的字符流。他们如何收集和保留源代码取决于特定的工具。

Java 语言规范在 Chapter 3 Lexical Structure 中声明:

Programs are written using the Unicode character set. Information about this character set and its associated character encodings may be found at http://www.unicode.org/.

因此,Java 源代码文件可能会使用一种与 Unicode 通用的字符编码,例如 UTF-8 , UTF-16 , 或 UCS-2。

Section 3.2 Lexical Translations提到 Java 程序可以使用诸如 ASCII 的编码通过嵌入 Unicode 转义:

Unicode escape of the form \uxxxx, where xxxx is a hexadecimal value, represents the UTF-16 code unit whose encoding is xxxx.

虽然 UTF-8 在我的经验中很常见,但这并不是唯一可能的编码。您必须知道或猜测任何特定源文件的编码,并且必须考虑扩展任何 Unicode 转义。

其他问题

顺便说一下,请注意至少在 Oracle JDK 中,byte order mark (BOM) optional to UTF-8文件在 Java 中是不允许的,因为一个错误 (JDK-4508058) 永远不会被修复(因为向后兼容性问题)。

另请注意 line terminators可能会有所不同:ASCII 字符 CR(回车)或 LF(换行)或 CR LF。

White space变化:空格 (SP)、字符制表 (HT)(水平制表符)、换页符 (FF) 和行终止符。

阅读规范以获取更多详细信息。例如,关于 SUBSTITUTE 字符:

As a special concession for compatibility with certain operating systems, the ASCII SUB character (\u001a, or control-Z) is ignored if it is the last character in the escaped input stream.

关于字符编码

确保您了解 Unicode 和字符编码的基础知识。最佳起点:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)乔尔·斯波斯基 (Joel Spolsky) 着。


即使像“每个 .java 文件一个公共(public)类”这样的假定规则也可能由特定工具而不是 Java 本身定义。 CodeWarrior Java 回溯工具——当每个文件支持多个类时。

关于java - 读取 java 源文件时使用什么字符集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37627577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com