大家好,欢迎来到IT知识分享网。
浅谈utf8和unicode及相关
文章目录
一、简介
unicode、utf8等编码在开发中经常遇到,这里简单聊聊。
二、unicode
2.1 unicode定义
unicode是字符集,是一种二进制编码,为每种语言的每个字符设定统一且唯一的二进制编码,1994年正式公布。也就是指定了字符的二进制编码,但并没有指定该字符最终采用几个字节表示,unicode只是单纯的字符二进制编码。
2.2 unicode编码
unicode有ucs-2和ucs-4两种编码方式,即是:
- ucs-2(universal character set coded in 2 octets):表示用2个字节表示字符,为最全世界最常用的63K字符编码,如:\u6c49;
- ucs-4(universal character set coded in 4 octets):表示用4个字节表示字符;
三、utf编码
utf编码有utf-8、utf-16、utf-32三种形式,即:
- utf8是变长编码方式,用1到4个字节表示。
- utf16是变长编码方式,用2或4个字节表示。
- utf32是固定使用4个字节表示。
3.1 utf-8
3.1.1 utf-8规则
utf8是变长编码方式,用1到4个字节表示,各字节数表示如下:
0xxxxxxx 110xxxxxxx 10xxxxxx 1110xxxxxxx 10xxxxxx 10xxxxxx 11110xxxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0开头的字节表示单独一个字符。除0开头的字节外, 其他3种,当第一个字节开头有几个1,就表示有多少个字节表示一个字符。
3.1.2 utf-8字节数
utf-8中,英文占1个字节,大多数汉字占3个字节,少数占4个字节
3.2 utf-16
utf-16是变长编码方式,用2或4个字节表示。对全世界常用的63k字符采用usc-2编码,另外用4个字节对不常用的字符编码。utf-16有三种方式: utf-16、utf-16be(big endian)、utf-16le(little endian)。这里涉及字节存储方式。
3.2.1 bom字节存储方式
字节存储方式,如ab cd,在不同存储方式如下:
big endian: 高位在前,即: ab cd little endian: 低位在前,即: cd ab
3.2.2 utf-16与ucs-2
utf-16是usc-2的扩展,对全世界常用的63k字符采用usc-2编码,另外用4个字节对不常用的字符编码。
3.2.3 utf-16字节数
utf-16中,英文占2个字节,大多数汉字占2个字节,少数占4个字节
3.3 utf-32
utf-32是ucs-4的子集,固定使用4个字节表示。
四、java中编码
4.1 内码和外码
- 内码(internal encoding):特定语言中,string和char在内存中的编码方式
- 外码(external encoding):除内码外,其余都是外码
4.2 java中编码
- jvm内码采用UTF-16,char占2个字节, 早期2字节可以表示所有字符,后期新增unicode码后,有些字符采用2个char(即4个字节)表示。
- java的class文件采用utf-8存储,即字符占1到4个字节。java序列化采用utf-8编码。
4.3 java中输出指定编码
在java中,字符串转特定编码的byte[]数组后,可以借助BigInteger在转为特定进制(如2进制、16进制)的字符串形式。
import lombok.
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/151008.html