Dea*_*ler 3 java character-encoding
我在读这个
我正在使用 eclipse 编译器库,但需要读取一些 java 源文件以将其提供给该库。它似乎可以以与该帖子不同的格式存储。
是否有一个字符集可以用来读取它,以便每次都能使用。Charset.forName("UTF-8") 也许?
谢谢,院长
任何工具都可以用任何编码编写 Java 源代码。甚至 .java 文件的想法也不是由Java Language Spec定义的。任何IDE都可以使用任何编码以任何方式保留 Java 源代码†。
这些工具负责最终将符合 Unicode 的字符流提供到编译器工具链中。他们如何收集和保存源代码取决于特定的工具。
Java 语言规范在第 3 章词法结构中指出:
程序是使用 Unicode 字符集编写的。有关此字符集及其相关字符编码的信息可以在http://www.unicode.org/上找到。
因此,据推测,Java 源代码文件将使用 Unicode 常见的字符编码之一,例如UTF-8、UTF-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 (CARRIAGE RETURN)、LF (LINE FEED) 或 CR LF。
空白区域各不相同:空格 (SP)、字符制表 (HT)(水平制表符)、换页符 (FF) 和行终止符。
阅读规范以获取更多详细信息。例如,关于 SUBSTITUTE 字符:
作为与某些操作系统兼容的特殊让步,如果 ASCII SUB 字符(\u001a 或 control-Z)是转义输入流中的最后一个字符,则它会被忽略。
确保您了解 Unicode 和字符编码的基础知识。最佳起点:Joel Spolsky的绝对最低要求,每个软件开发人员绝对,肯定必须了解 Unicode 和字符集(没有借口!)。
†甚至诸如“每个 .java 文件一个公共类”之类的假设规则也可能由特定工具而不是 Java 本身定义。用于 Java 回退的CodeWarrior工具支持每个文件的多个类。
| 归档时间: |
|
| 查看次数: |
4471 次 |
| 最近记录: |