【Unicode介绍】
百度百科:Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求,并且兼容ISO-8859-1。
一个字符的Unicode编码是确定的,但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)
Unicode是字符集,它主要有UTF-8、UTF-16、UTF-32三种实现方式。由于UTF-8是目前主流的实现方式。
UCS(Universal Character Set,通用字符集),是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。它包括了其他所有字符集,保证了与其他字符集的双向兼容,即,如果你将任何文本字符串翻译到UCS格式,然后再翻译回原编码,你不会丢失任何信息。
UCS不仅给每个字符分配一个代码,而且赋予了一个正式的名字。表示一个UCS或Unicode值的十六进制数通常在前面加上“U+”,例如“U+0041”代表字符“A”。
Java的class文件采用utf8的编码方式,Java的字符串是unicode编码的
UTF-8
UTF-8是一种针对Unicode的可变长度字符编码,可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的系统无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。
UTF-8使用一到四个字节为每个字符编码,编码规则如下:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
转换表如下:
Unicode
UTF-8
0000 0000 —— 0000 007F
0XXX XXXX
0000 0080 —— 0000 07FF
110X XXXX 10XX XXXX
0000 0800 —— 0000 FFFF
1110XXXX 10XX XXXX 10XX XXXX
0001 0000 —— 001F FFFF
1111 0XXX 10XX XXXX 10XX XXXX 10XX XXXX
0020 0000 —— 03FF FFFF
1111 10XX 10XX XXXX 10XX XXXX 10XX XXXX 10XX XXXX
0400 0000 —— 7FFF FFFF
1111 110X 10XX XXXX 10XX XXXX 10XX XXXX 10XX XXXX 10XX XXXX
根据上面的转换表,理解UTF-8的转换编码规则就变得非常简单了:第一个字节的第一位如果为0,则表示这个字节单独就是一个字符;如果为1,连续多少个1就表示该字符占有多少个字节。
以汉字”严”为例,演示如何实现UTF-8编码[3]。
已知”严”的unicode是4E25(100 1110 0010 0101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此”严”的UTF-8编码需要三个字节,即格式是”1110xxxx 10xxxxxx 10xxxxxx”。然后,从”严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,”严”的UTF-8编码是”11100100 10111000 10100101″,转换成十六进制就是E4B8A5。
ANSI:记事本的默认的编码方式,对于英文文件是ASCII编码,对于简体中文文件是GB2312编码。注意:不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中
Unicode:UCS-2编码方式,即直接用两个字节存入字符的Unicode码。该方式是倒序方式存取,该方式是”小头”little endian。
Unicode big endian:UCS-2编码方式,顺序方式存取,即 “大头”方式。
在EditPlus输入”严”字,依次选择ANSI、Unicode、Unicode big endian、UTF-8四种编码风格,然后另存,使用Hex Viewer工具进行查看:
ANSI:两个字节”D1 CF”正是”严”的GB2312编码。
Unicode:四个字节”FF FE 25 4E”,其中”FF FE”表示小头(倒序)存储方式,真正的编码为”4E 25″。
Unicode big endian:四个字节”FE FF 4E 25″,”FE FF”表示大头(顺序)存储方式,真正编码为”4E 25″。
UTF-8:编码是六个字节”EF BB BF E4 B8 A5″,前三个字节”EF BB BF”表示这是UTF-8编码,后三个”E4B8A5″就是”严”的具体编码,它的存储顺序与编码顺序是一致的。
今天的文章java 编码 unicode_java编码-Unicode分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/26575.html