有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

Java字符类型是否保证以任何特定的编码方式存储

编辑:我对这个问题的措辞不正确。我想问的是是否保证字符文本使用任何特定的编码


共 (3) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    Java char通常用于持有Unicode code unit;i、 e.作为有效UTF-16序列一部分的16位单元。但是,没有什么可以阻止应用程序将任何16位无符号值放入char,而不管它的实际含义是什么

    所以你可以说Unicode代码单元可以char表示,而char可以表示Unicode代码单元。。。但在一般情况下,这两种情况都不一定是正确的

    您关于如何存储Java char的问题无法回答。简单地说,这取决于“存储”的含义:

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

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


    Is the Java char type guaranteed to be stored in any particular encoding?

    根据我上面所说的,答案是“不”。在正在执行的应用程序中,由应用程序决定char的含义/包含内容。当一个char被存储到一个文件中时,应用程序决定如何存储它以及它将使用什么磁盘表示


    跟进

    What about char literals? For example, 'c' must have some value that is defined by the language.

    它取决于字符的文字形式,以及字符是什么。例如,“c”将具有小写字母“c”的Unicode码点底部16位的值。但表示为“\uxxx”的文字可能不代表有效的Unicode代码点。或者(取决于应用程序的意思),它可能根本不代表字符

    源代码文件的编码也(可能)使这一点变得复杂。从理论上讲,可以使用自定义字符编码来表示源代码,其中(为了参数起见)大写字母编码为小写字母,反之亦然。如果您这样做了,并且能够在启动编译器之前注册相应的字符集编码器和解码器,那么看起来像'c'(将输入视为ASCII或UTF-8)的文本在编译器程序中实际具有值67,而不是99

  3. # 3 楼答案

    最初,Java在内部使用UCS-2;现在它使用UTF-16。除了D800-DFFF之外,这两个字符实际上是相同的,D800-DFFF在UTF-16中用作较大字符扩展表示的一部分