最初,Internet上只有一种字符集——ANSI的ASCII字符集(American Standard Code for Information Interchange, “美国信息交换标准码),它使用7 bits来表示一个字符,总共表示128个字符,后来IBM公司在此基础上进行了扩展,用8bit来表示一个字符,总共可以表示256个字符,充分利用了一个字节所能表达的最大信息 ANSI字符集:ASCII字符集,以及由此派生并兼容的字符集,如:GB2312,正式的名称为MBCS(Multi-Byte Chactacter System,多字节字符系统),通常也称为ANSI字符集。 UNICODE与UTF8,UTF16 | |
由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,产生了Unicode字符集,它固定使用16 bits(两个字节)来表示一个字符,共可以表示65536个字符 |
例如“连通”两个字的Unicode标准编码UTF-16 (big endian(存放时高位在前,低位在后))为:DE 8F 1A 90 Unicode: Unicode与UCS的关系: 在windows平台,UTF-16LE也被称作unicode。UTF-16BE被称作unicode big endian。这是因为Windows内核使用了UTF-16LE编码。这种叫法并不规范。 |
如果“字符”是以在Unicode中的序号存在的,那么我们称这种字符串为Unicode字符串或者宽字节字符串。在Unicode中,每个字符都占两个字节。如,"中文123"(占10字节)。
UTF是UCS Transformation Format的缩写。它规定了unicode编码的传输格式,即用哪几个字节表示一个unicode编码。同一个unicode编码可以有不同的传输格式。 例如“汉”的编码0x6C49在UTF-8中被映射成E6 B1 89。在UTF-16LE中被映射成49 6C。在UTF-16BE中被映射成6C 49。 |
在jvm内部,虚拟机管理数据(内存里)时,或者在进行对象序列化的时候,字符(串)都是以unicode编码方式的。 |