繁体   English   中英

读取Java源文件时要使用什么字符集?

[英]What charset to use when reading in a java source file?

我在看这个

源代码应以UTF-8格式保存

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

有没有一个我可以用来读取它的字符集,因此每次都能使用。 Charset.forName(“ UTF-8”)也许?

谢谢,院长

字符编码不同

任何工具都可以用任何编码编写Java源代码。 Java语言规范甚至都没有定义.java文件的想法。 任何IDE能坚持Java源代码,它想要的任何方式与任何编码。

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

Java语言规范在第3章词法结构中规定

程序使用Unicode字符集编写。 有关此字符集及其关联的字符编码的信息,可以在http://www.unicode.org/上找到。

因此,假定Java源代码文件将使用Unicode通用的字符编码之一,例如UTF-8UTF-16或UCS-2。

第3.2节词汇翻译提到Java程序可以通过嵌入Unicode转义来使用ASCII之类的编码:

\\ uxxxx格式的Unicode转义符,其中xxxx是十六进制值,表示其编码为xxxx的UTF-16代码单元。

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

其他事宜

顺便说一句,请注意至少在Oracle JDK,在字节顺序标记(BOM) 可选为UTF-8的文件在Java中是不允许因错误( JDK-4508058 ,将永远是固定的(因为向后的)兼容性问题)。

另请注意, 行终止符可能有所不同:ASCII字符CR(回车)或LF(行进纸)或CR LF。

空白各不相同:空格(SP),字符制表符(HT)(水平选项卡),进纸(FF)和行终止符。

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

作为与某些操作系统兼容的特殊让步,如果ASCII SUB字符(\\ u001a或control-Z)是转义的输入流中的最后一个字符,则将其忽略。

关于字符编码

确保您了解Unicode和字符编码的基础。 最佳起点: 每个软件开发人员的绝对最低限度必须绝对,绝对要了解 Joel Spolsky编写的Unicode和字符集(无借口!)


甚至假定的规则(例如“每个.java文件一个公共类”)也可以由特定工具定义,而不是由Java本身定义。 Java的CodeWarrior工具可以在每个文件支持多个类时使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM