字符编码与字节序

Unicode

  • Unicode(又称统一码、万国码、单一码),由多语言软件制造商组成的统一码联盟开发。
  • UTF-8UTF-16UTF-32都是将数字转换到程序数据的编码方案。
  • Unicode字符分为17组编排,0x0000至0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。平面2的43253个字符都是汉字。平面0上定义了27973个汉字。
  • 已定义的码位只有238605个,分布在平面0、平面1、平面2、平面14、平面15、平面16。其中平面15和平面16是自定义字符的区域
  • 另一种“统一码标准”:国际标准化组织(ISO)开发的ISO 10646,从Unicode 2.0开始,Unicode采用了与ISO 10646-1相同的字库和字码。其中ISO的编码原则是定长,Unicode的编码原则是不定长。

UTF-8

Unicode编码(十六进制)UTF-8 字节流(二进制)
000000-00007F0xxxxxxx
000080-0007FF110xxxxx 10xxxxxx
000800-00FFFF(常用汉字在这里)1110xxxx 10xxxxxx 10xxxxxx
010000-10FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
  • UTF-8的编码格式如上。11110/1110/110控制字节长度,通过10标识子数据区,通过0标识ASCII码
  • UTF-8的特点是对不同范围的字符使用不同长度的编码
  • 与UTF-16/UTF-32相比,优点占数据多数的英文字母只需要一个字节
  • 以GB2312/GBK相比,utf-8是国际通用协议,但是占据空间较大(实际上windows在存储的时候也是使用utf-8,表现层使用代码页(Codepage)技术转换成其他语言(包括GB2312/GBK/GB18030)
  • 常用汉字在平面0(3个字节),罕见汉字在平面14(4个字节)

UTF-16

  • U<0x10000 ,使用单字节标识
  • U>=0x10000,令U’ = U-0x10000,使用2个字节大小U’表示U,110110标识高字节,110111标识低字节
  • 为了辨别2个字节,被作为标识的110110和110111,以其开头的区段在UNICODE中没有被使用来标识文字,这个区段被称之为代理区

UTF-32

就是Unicode编码

BOM

根据字节序的不同,UTF-16可被实现为UTF-16LE或UTF-16BE,UTF-32可被实现为UTF-32LE或UTF-32BE
BOM(Byte Order Mark)来区分字节序,即在传输字节流前,先传输“FEFF”,以UTF-16为例,UTF-16LE(FF FE),UTF-16BE(FE FF)

GB2312/GBK/GB18030

  • GB2312由中国国家标准总局1980年发布
  • GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个
  • 因此人名、古汉语等方面出现的罕用字,GB 2312不能处理,从而推出了GBK
  • GBK支持ISO/IEC10646—1和GB 13000—1的全部中、日、韩(CJK)汉字,共计20902字。
  • GB 18030对GB 2312完全兼容,与GBK基本兼容,并支持Unicode(GB 13000)的所有码位。共收录汉字70,244个
  • GB 18030采用变长多字节编码,每个字可以由1个、2个或4个字节组成。完全支持Unicode,支持中国国内少数民族文字、中日韩和繁体汉字以及表情字符。

字节序

  • 大端(Big endian):将高序字节存储在起始地址
  • 小端(Little endian):将低序字节存储在起始地址
  • 网络序:网络字节顺序是TCP/IP中规定好的一种数据表示格式,采用big endian排序方式
  • x86系列CPU是小端的,ARM可大可小
  • 存在原因:大端贴近人类思维,小端贴近机器思维,小端运算更快(未核实,数电已经全部换给老师了,有兴趣自己深究)
  • 论坛经典:程序中不应该出现大小字节序的问题,只有‘网络字节序’和‘本机字节序’。应该使用ntohl,ntohs,htonl,htons(h:host,n:net)进行转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值