编码 -- char 1= '中' 2 byte, 中文string a="中" 3字节问题
来源:互联网 发布:炉石卡组软件 编辑:程序博客网 时间:2024/05/17 04:20
char在Java中应该是16个字节
byte在Java中应该是8个字节
char x = '编'; //这样是合法的,输出也是16个字节
但是
String str = "编";
byte[] bytes = str.getBytes(); //我想不明白,为什么这里要占用3个byte呢?
3个byte一共是3*8=24个字节,那么char x怎么又放得下?我坚信char是16个字节,
但是str.getBytes()这个东西到底又怎么回事?
解答1:
首先,java中的一个char的确是2个字节。java采用unicode,2个字节来表示一个字符。
其次,楼主你说的byte[] bytes = str.getBytes();之后是3个字节,这里和前面的概念不一样。java是用unicode来表示字符,"编"这个中文字符的unicode就是2个字节。String.getBytes(encoding)方法是获取指定编码的byte数组表示,通常gbk/gb2312是2个字节,utf-8是3个字节。如果不指定encoding则取系统默认的encoding.
另外,楼主的“字节”说的有点乱,通常我们说的字节是指byte,还有一个"位"的概念(bit),通常情况下1 byte=8 bit.
"3个byte一共是3*8=24个字节"这句话应该表示为“3个byte一共是3*8=24个bit”
解答2:
首先,要搞清楚 code point 和 encoding 的区别。Java 是遵循 unicode 4.0 标准的,而内部的 character 以 utf-16 作为 encoding。unicode 4.0 标准包含从 U+0000-U+FFFF 的基本多语言平面和 U+10000-U+10FFFF 的扩展平面的文字,这是 code point。Java 的 char 类型是 16 bit 的,所以单个 char 只支持基本平面内的文字,而扩展平面的文字是由一对 char 来表示的。
而 String.getBytes() 这个方法是按照指定的 encoding 返回字符串,一般中文系统的默认编码是 utf-8 (linux, mac) 或者 gbk/gb18030 (windows)。只要是基本平面内的文字,utf-8码的中文都是3字节的,而 gbk/gbk18030 是2字节的。
- 编码 -- char 1= '中' 2 byte, 中文string a="中" 3字节问题
- 编码 -- char 1= '中' 2 byte, 中文string a="中" 3字节问题
- Java中byte[]转String问题 丢失字节
- byte[]、String转换中文编码问题
- 关于String中各种编码中文字符的字节长度
- C++中 unsigned char != byte
- Java中的byte char String 编码 解码
- c#中 uint--byte[]--char[]--string相互转换汇总
- c#中 uint--byte[]--char[]--string相互转换汇总
- 【C#】c#中 uint--byte[]--char[]--string相互转换汇总
- c#中 uint--byte[]--char[]--string相互转换汇总
- c#中 uint--byte[]--char[]--string相互转换汇总
- c#中 uint--byte[]--char[]--string相互转换汇总
- 学习笔记--C#中byte[],char []转string
- c#中 uint--byte[]--char[]--string相互转换汇总
- c#中 uint--byte[]--char[]--string相互转换汇总
- c#中 uint--byte[]--char[]--string相互转换汇总
- c#中 uint--byte[]--char[]--string相互转换汇总
- MySQL 学习笔记 一
- oracle网络服务端配置
- 小心得(0620)
- vs2008中ActiveX控件的测试(Active X Test Container)
- POJ3468 A Simple Problem with Integers 线段树求解区间和
- 编码 -- char 1= '中' 2 byte, 中文string a="中" 3字节问题
- android图形化学习1
- android图形化学习1
- CosOS源代码发布,欢迎大家共同研究
- [Not Solved] [Unix Philosophy] [The Art of Unix Programming] 怎样理解 "X致力于提供一套'机制, 而不是策略'" 的设计理念
- 手机电影“死”还是“活”?
- C# Delegate(委托)与多线程
- PHP读取EXCEL
- oracle url encode decode