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

时间:2016-06-04 07:23:45

标签: java character-encoding

我正在读这个

Should source code be saved in UTF-8 format

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

我是否可以使用一个Charset来阅读它,所以每次都可以使用。 Charset.forName(" UTF-8")可能?

感谢, 迪安

1 个答案:

答案 0 :(得分:4)

字符编码各不相同

任何工具都可以用任何编码编写Java源代码。甚至{。3}}也没有定义.java文件的想法。任何Java Language Spec都可以通过任何编码以任何方式保存Java源代码

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

Java语言规范在IDE中说明:

  

使用Unicode字符集编写程序。有关此字符集及其相关字符编码的信息,请访问Chapter 3 Lexical Structure

因此,Java源代码文件可能会使用Unicode中常见的字符编码之一,例如http://www.unicode.org/UTF-8或UCS-2。

UTF-16提到Java程序可以通过嵌入Unicode转义来使用Section 3.2 Lexical Translations之类的编码:

  

形式\ uxxxx的Unicode转义,其中xxxx是ASCII值,表示编码为xxxx的UTF-16代码单元。

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

其他问题

顺便说一下,请注意,至少在Oracle JDK中,由于错误导致hexadecimal byte order mark (BOM)文件 optional to UTF-8 )永远不会被修复(因为向后兼容性问题)。

另请注意,JDK-4508058可能会有所不同:ASCII字符CR(CARRIAGE RETURN),或LF(LINE FEED)或CR LF。

line terminators有所不同:SPACE(SP),CHARACTER TABULATION(HT)(水平制表符),FORM FEED(FF)和行终止符。

阅读规范了解更多详情。例如,关于SUBSTITUTE字符:

  

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

关于字符编码

确保您了解Unicode和字符编码的基础知识。最佳起点:Joel Spolsky的White space

即使是假设的规则,例如“每个.java文件的一个公共类”,也可能由特定工具而不是Java本身来定义。用于Java的The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)工具支持每个文件支持多个类。