字符编码问题

1、ASCII编码

0 - 7F,0000 0000-----0111 1111标准ASCII码

80 - FF 1000 0000 -------1111 1111扩展ASCII码

2、GB2312或GB2312-80(针对自己国家)基于扩展ASCII码

单独看每一个字节,都是扩展ASCII码表中的数据,2个表示一个汉字,这就是GB2312编码,

但是GB2312存在很大的弊端,例:

将一份GB2312编码的邮件发给一个老外的时候,它看到的是乱码,因为不同国家的解释不一样,比如D6 D0 B9 FA在我们国家看到的是”中国”两个汉字,当你发给你个韩国人的时候,它看到的可能是一个韩文

怎么解决问题这个乱码问题呢?UNICODE出现

3、UNICODE

这是一个编码方案,说白了就是一张包含全世界所有文字的一个编码表,只要这个世界上存在的文字符号,统统给你一个唯一的编码:

UNICODE编码范围是: 0 - 0X10FFFF, 可以容纳100多万个符号!

UNICODE 的问题?

假如说:

用多少个字节来存储呢?

UNICODE 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储

4、如何存储UNICODE,  UTF-16\UTF-8是UNICODE的实现方式

<1> UTF-16

UTF-16编码以16位无符号整数为单位,注意是16位为一个单位,不表示一个字符就只有16位。这个要看字符的UNICODE编码处于什么范围而定,有可能是2个字节,也有可能是4个字节,现在机器上的UNCODE 编码一般指的就是UTF-16

因为它任何符号都是以2个字节为单位,对于A,B,C这种简单的符号,一个字节就够了,所以用UTF-16可能会浪费空间,在网络传输中效率可能会慢,

<2> UTF-8

比如在记事本中写入 “AB字”,然后分别存储为UTF-16 或 UTF-8的格式

“字” UTF-16 是 5B 57

UTF-8 是 E5 AD 97

因为5B 57在000800 -00FFFF之间,所以按上图第三行的方式解释

E5 AD 97

1110 0101 1010 1101 1001 0111

红色部分拼接为0101 1011 0101 0111,即5B 57

 

那么给定一个文本,怎么知道是解析为UTF-16还是UTF-8呢?

<3> BOM (Byte Order Mark)(解决解析时候的问题)

UTF-8           || EF BB BF

UTF-16(LE)  || FF FE

UTF-16(BE)  || FE FF

这是前缀,即怎么解析这个文件是UTF-8还是UTF-16呢??就是通过这个前缀来解决的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值