4字节UTF16编码和对C++/Java的影响
2013-12-09 14:10
190 查看
UTF16也可以占据4个byte
不要被UTF16这个名字骗了,UTF16编码也有可能占据4个byte。比如,把下面的四个字符,用Notepad工具选择UTF16编码保存为txt文件就可以发现,每个字符都占据了4个bytes。
原因是,在远古时代,unicode字符的code point的范围是0x0000-0xffff,因此UTF16编码也都是16位。但后来unicode的code point可以超过16位了(0x0-0x10FFFF),UTF16编码也与时俱进,code point小于0xffff的字符仍然占据2Bytes,超过的就用4个bytes表示。
C++与UTF16
VC下,sizeof(wchar_t) = 2,因此无法表示所有的unicode字符。但是gcc下sizeof(wchar_t) == 4,这个才是完善的。Java与UTF16
Java中,char类型虽然采用UTF16编码,但它只占据两个byte,因此无法表示一些特殊字符。以下是JVM规范对char类型的描述:
"char, whose values are 16-bit unsigned integers representing Unicode code
points in the Basic Multilingual Plane, encoded with UTF-16, and whose default
value is the null code point ('\u0000')."
Java中的String类型也采用UTF16编码,但它不受两个byte的限制,以下为javadoc对String的描述:
"A String represents a string in the UTF-16 format in which supplementary characters
are represented by surrogate pairs (see the section Unicode Character Representations
in the Character class for more information). Index values refer to char code units,
so a supplementary character uses two positions in a String."
以下为相关的测试代码(csdn对特殊字符有限制,所以采用了图片格式):
相关文章推荐
- "Unicode"编码,java实现一个按字节截取字符串的子串的方法
- Java IO 字节编码
- java中的字符,字节和编码
- 按 字节截取分别以GBK 和 utf-8 编码的 字符串的java程序。
- 【浅析】Java程序比C/C++程序慢的影响因素
- IO_缓冲流_转换流_字节转为字符_乱码分析_编码与解码JAVA152-154
- Java面试题之一---------字符串截取(字节分配)(编码)
- java 字符 字节 与 编码
- 使用java 发布webservice,使用C++接收避免编码不兼容问题
- c++和java字节高低位的转换
- Java和一些windows编程语言如c、c++、delphi所写的网络程序进行通讯时,需要进行高、低字节之间的转换
- C++进阶—>带你理解多字节编码与Unicode码
- c++和java字节高低位的转换
- Java中的UTF-8、UTF-16编码字符所占字节数
- JAVA中文字节编码确认
- 帮你理清Java中字符与字节的编码关系
- java与C/C++字节顺序区别
- java与c++网络通信时的字节顺序问题
- java中文编码实现C++的strcmp功能
- Java String类涉及到UTF16编码的几个概念