字符集编码相关

BOM(byte-order mark)字节序标记,BOM的作用有两个,一是标记文本的编码类型,二是标记文本编码的字节序,文本文件的最开头都会有BOM标记(windows默认编码是ANSI,不带BOM)。

以下是各种编码相关的BOM:
UTF-8(3Byte): EF BB BF
UTF-16(BE)(2Byte): FE FF
UTF-16(LE)(2Byte): FF FE
UTF-32(BE)(4Byte): 00 00 FE FF
UTF-32(LE)(4Byte): FF FE 00 00

utf8编码是一种变长的编码方式,英文半角字符采用和ascii一致的编码方式,中文编码长度一般为3个字节,按unicode6.0编码标准,utf8最大长度为4字节。
具体的编码方式如下(来自unicode6.0标准文档):

Scalar Value

First Byte

Second Byte

Third Byte

Fourth Byte

00000000 0xxxxxxx

0xxxxxxx

 

 

 

00000yyy yyxxxxxx

110yyyyy

10xxxxxx

 

 

zzzzyyyy yyxxxxxx

1110zzzz

10yyyyyy

10xxxxxx

 

000uuuuu zzzzyyyy yyxxxxxx

11110uuu

10uuzzzz

10yyyyyy

10xxxxxx


utf16和utf32都是定长的编码方式,utf16所有字符长度都为2个字节,utf32的所有字符长度都为4个字节。

BE(Big Endian)和LE(Little Endian)的区别是字节序的不同,例如:
UTF16中字符A的U码为/u0041,BE的字节序列为:/x00/x41,LE的字节序列为:/x41/x00。

注:之前说的C++默认的字节序为UTF-16(BE)是错误的理解,实在抱歉误导大家,稍后提供更详细的说明。
顺便提一下:内存中的字节序是和具体的硬件有关系。

各种编码对应的ascii码:
ascii: {
0~9: 0x30~0x39,
a~z: 0x61~0x7a,
A~Z: 0x41~0x5a,
!(0x21)~~(0x7e): 0x21~0x7e
};
utf8(半角)和ascii一致;
utf8(全角): {
0~9: /xef/xbc/x90~/xef/xbc/x99,
a~z: /xef/xbd/x81~/xef/xbd/x9a,
A~Z: /xef/xbc/xa1~/xef/xbc/xba,
!(0x21)~_(0x5f): /xef/xbc/x81~/xef/xbc/xbf,
`(0x60)~~(0x7e): /xef/xbd/x80~/xef/xbd/x9e
};
utf16(半角): {
0~9: /u0030~/u0039,
a~z: /u0061~/u007a,
A~Z: /u0041~/u005a,
!(0x21)~~(0x7e): /u0021~/u007e
};
utf16(全角): {
0~9: /uff10~/uff19,
a~z: /uff41~/uff5a,
A~Z: /uff21~/uff3a,
!(0x21)~~(0x7e): /uff01~/uff5e
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值