Java 在内部使用 Unicode。总是。实际上,它大部分时间都使用 UTF-16,但现在这太详细了。
它不能在内部使用 ASCII(String
例如)。您可以表示任何可以用 Unicode 中的 ASCII 表示的字符串,所以这应该不是问题。
平台发挥作用的唯一地方是当您没有指定编码时,Java 必须选择一种编码。例如,当您创建一个FileWriter
将String
值写入字符串时:此时 Java 需要使用编码来指定特定字符应如何映射到字节。如果您不指定一个,则使用平台的默认编码。该默认编码几乎从不 ASCII。大多数 Linux 平台使用 UTF-8,Windows经常使用一些 ISO-8859-* 衍生物(或其他特定于文化的 8 位编码),但当前的操作系统没有使用 ASCII(仅仅是因为 ASCII 不能表示很多重要字符) .
事实上,现在纯 ASCII 几乎是无关紧要的:没有人使用它。ASCII仅作为大多数 8 位编码(包括 UTF-8)映射的公共子集很重要:较低的 128 个 Unicode 代码点以 1:1 映射到许多编码中的数值 0-127。但是纯 ASCII(其中值 128-255未定义)不再有效使用。
作为旁注,Java 9 有一个称为“紧凑字符串”的内部优化,其中仅包含可在 Latin-1 中表示的字符的字符串使用每个字符而不是 2 个字节。这种优化对于各种“计算机语言”非常有用像 XML 和类似协议,其中大部分文本都在 ASCII 范围内。但它对开发人员也是完全透明的,因为所有处理都是在String
类内部完成的,从外部看不到。