unicode Java字符存储在什么编码中? 2 月,2 周 Questions & Answers 15475 Java字符类型是否保证以任何特定的编码方式存储 编辑:我对这个问题的措辞不正确。我想问的是是否保证字符文本使用任何特定的编码强>
# 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 楼答案 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
# 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 楼答案
Java
char
通常用于持有Unicode code unit;i、 e.作为有效UTF-16序列一部分的16位单元。但是,没有什么可以阻止应用程序将任何16位无符号值放入char
,而不管它的实际含义是什么所以你可以说Unicode代码单元可以用
char
表示,而char
可以表示Unicode代码单元。。。但在一般情况下,这两种情况都不一定是正确的您关于如何存储Java
char
的问题无法回答。简单地说,这取决于“存储”的含义:如果您的意思是“在执行程序中表示”,那么答案是特定于JVM实现的。(数据类型
char
通常表示为16位机器整数,尽管它可能是机器字对齐的,也可能不是机器字对齐的,这取决于特定的上下文。)如果您是指“存储在文件中”或类似的内容,那么答案完全取决于应用程序选择如何存储它
根据我上面所说的,答案是“不”。在正在执行的应用程序中,由应用程序决定
char
的含义/包含内容。当一个char
被存储到一个文件中时,应用程序决定如何存储它以及它将使用什么磁盘表示跟进
它取决于字符的文字形式,以及字符是什么。例如,“c”将具有小写字母“c”的Unicode码点底部16位的值。但表示为“\uxxx”的文字可能不代表有效的Unicode代码点。或者(取决于应用程序的意思),它可能根本不代表字符
源代码文件的编码也(可能)使这一点变得复杂。从理论上讲,可以使用自定义字符编码来表示源代码,其中(为了参数起见)大写字母编码为小写字母,反之亦然。如果您这样做了,并且能够在启动编译器之前注册相应的字符集编码器和解码器,那么看起来像
'c'
(将输入视为ASCII或UTF-8)的文本在编译器程序中实际具有值67
,而不是99
# 3 楼答案
最初,Java在内部使用UCS-2;现在它使用UTF-16。除了D800-DFFF之外,这两个字符实际上是相同的,D800-DFFF在UTF-16中用作较大字符扩展表示的一部分