一直都是糊里糊涂的在用,始终没有搞清楚汉字在java中占用字节个数的问题,每次都是逃避着过去了。今天一个字节编码问题让我不得不去重新认识char与汉字编码这个问题。
下面是引用一个讨论中的资料:
http://www.iteye.com/topic/47740 写道
(由于原作者将字节和位写混淆了,引用时我已做过更改)
貌似一个简单的问题(也许还真是简单的)但是却把曾经自认为弄清楚的我弄得莫名其
妙
char在Java中应该是16个bit
byte在Java中应该是8个bit
char x = '编'; //这样是合法的,输出也是16个bit
但是
String str = "编";
byte[] bytes = str.getBytes(); //我想不明白,为什么这里要占用3个byte呢?
3个byte一共是3*8=24个bit,那么char x怎么又放得下?我坚信char是16个bit,
但是str.getBytes()这个东西到底又怎么回事?
不好意思,表达有点乱,但是的确太奇怪了。希望大家能指点一下。
skydream 写道
首先,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.
kdekid 写道
首先,要搞清楚 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字节的。
分享到:
相关推荐
Keil MDK-ARM各种数据类型占用的字节数 char short int float double占用字节数,uCOS-II
java_byte与char、String互转.................
重点讲述Java语言中容易混淆的char与byte的联系与区别
char型变量中能不能存储一个中文汉字?为什么 char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,...补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
char型是存储字符的...Java中的char型与C/C++中的char型不同。在C /C++中,char型采用的是ASCII字符集,宽度为8位,范围为0-255,而Java中char型采用的是Unicode字符集,范围较 ASCII字符集更大,可以表示更多的字符
这是一个用JAVA语言编写的源代码,里面的内容主要是char数据类型的应用,适合初学者参考.
主要介绍了Java中char[] 和 String 类型占用字节大小问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
介绍mfc的cstring包含中文时转换成char*的两种方法
或wchar_t*来表示,char*表示的是ANSCII字符串, wchar_t*表示Unicode字符串,Unicode字符串在C/C++中一个字符占用两个字节,ANSII字符串一个字符占用一个字节(中文占用两个字节), 如果C++的接口声明为char*的入口...
里面有全部string的函数说明,char函数说明等,对新手来说是一个很好的东西哦
主要介绍了java中的char占几个字节实例分析的相关资料,需要的朋友可以参考下
java中int_char_string三种类型的相互转换
此为QString无损转char*和unsigned char* 。 当QString内容包含汉字时,转换char*等会发生...使用后char*与unsigned char*的qDebug()输出与QString输出结果相同。 注意,该函数返回unsigned char*使用完毕后记得delete。
解码 说明:本方法保证 不论参数s是否经过escape()编码,均能得到正确的“解码”结果。另外如果出现了Erro—Parameters: Character decoding failed. 请使用escape(escape(s)...解码URL中的中文,默认使用UTF-8进行解码
主要介绍了Java中char数组(字符数组)与字符串String类型的转换方法,涉及Java中toCharArray与valueOf方法的使用技巧,需要的朋友可以参考下
char占两个字节,数字大小为0———216-1,是unicode编码。 字符的本来面目,我们为什么可以直接将一个数字赋给字符变量。 Boolean占一个字节,其取值只有两个,true和false。 等等 详细介绍用法
char ,int,long,float,double,等在64位和32位下分别占多少字节
mysql 数据类型,它们详细的表示范围,所占用的字节数。
Java代码 1.import java.util.Comparator; 2.import net.sourceforge.pinyin4j.PinyinHelper; 3./** 4. * 汉字按照拼音排序的比较器 5. * @author KennyLee 2009-2-23 10:08:59 6. * 7. */ 8.public class ...
首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-127~127,unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,...