Java字符存储在什么编码中?

2022-09-04 06:46:18

Java char 类型是否保证以任何特定编码存储?

编辑:我错误地表达了这个问题。我想问的是,字符文本是否保证使用任何特定的编码?


答案 1

“存储”在哪里?Java 中的所有字符串都以 UTF-16 表示。当写入文件、通过网络发送或其他任何内容时,将使用您指定的任何字符编码发送。

编辑:具体到类型,请参阅字符文档。具体来说:“char 数据类型...基于原始的 Unicode 规范,该规范将字符定义为固定宽度的 16 位实体。因此,如果 实际包含该字符集中的字符,强制转换为 将始终为您提供 UTF-16 值。如果您只是将一些随机值戳入 ,它显然不一定是有效的 UTF-16 字符,同样,如果您使用错误的编码读取该字符。文档继续讨论补充 UTF-16 字符如何只能由 表示,因为没有足够的空间来容纳它们,并且如果您在此级别操作,则熟悉这些语义可能很重要。charcharintcharcharintchar


答案 2

Java通常用于保存Unicode代码单元;即作为有效 UTF-16 序列一部分的 16 位单位。但是,没有什么可以阻止应用程序将任何 16 位无符号值放入 中,而不管它的实际含义如何。charchar

所以你可以说Unicode代码单元可以用a表示,a可以表示Unicode代码单元......但在一般情况下,这些都不一定是正确的。charchar

您关于Java如何存储的问题无法回答。简单地说,这取决于你所说的“存储”是什么意思:char

  • 如果你的意思是“在执行程序中表示”,那么答案是特定于JVM实现的。(数据类型通常表示为 16 位机器整数,尽管它可能是也可能不是机器字对齐,具体取决于特定的上下文。char

  • 如果您指的是“存储在文件中”或类似的东西,那么答案完全取决于应用程序选择如何存储它。


Java char 类型是否保证以任何特定编码存储?

根据我上面所说的,答案是“不”。在执行应用程序中,由应用程序决定意味着/包含什么。将 存储到文件时,应用程序将决定它想要如何存储它以及它将使用什么磁盘表示形式。charchar


随访

字符字面量呢?例如,“c”必须具有由语言定义的某个值。

Java源代码(根据语言规范)要求是Unicode文本,以工具链理解的某些字符编码表示;请参阅该选项。从理论上讲,字符编码可以将源代码中的 in 映射到意想不到的内容。javac-encodingc'c'

但实际上,will 将映射到 Unicode 小写 C 码位 (U+0063),并将表示为 16 位无符号值0x0063。c

如果 char 字面量具有 Java 语言赋予的含义,则它们表示(并表示为)UTF-16 代码单元。请注意,它们可能被分配也可能不被分配 Unicode 码位(“字符”)。U+0000 到 U+FFFF 范围内的某些 Unicode 码位是未分配的。


推荐