字符编码-深入理解ASCII,GB2312,GBK,Unicode,UTF-8

 我来答
大沈他次苹0B
2022-07-02 · TA获得超过7302个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:174万
展开全部

ASCII码是西欧编码的方式,采取7位编码,所以是2^7=128,共可以表示128个字符,包括34个字符,(如换行LF,回车CR等),其余94位为英文字母和标点符号及运算符号等。

重点:

注:NUL:‘\0'是一个ASCII码为0的字符,从ASCII码表中可以看到ASCII码为0的字符是“空操作字符”,它不引起任何控制动作,也不是一个可显示的字符。

你看到的unicode字符集是这样的编码表:

计算机只懂二进制,因此,严格按照unicode的方式(UCS-2),应该这样存储:

这个字符串总共占用了18个字节,但是对比中英文的二进制码,可以发现,英文前9位都是0!浪费啊,浪费硬盘,浪费流量。

怎么办?

UTF

UTF-8是这样做的:

这样就形成了如下的UTF-8标记位:


从上面的内容了解了字符编码以后,以后遇到相关的字符编码问题的时候至少有解决的思路,而不是一头雾水

开始问题分析:
1.字符集分析:gb2312支持数字和英文和6000+汉字
2.编码分析:英文占一个字节,中文占两个字节(这就是问题)

这时就要想到,中文汉子对照表:

3.特性:gb2312的高位字节如果大于127(ASCII),就为中文,只有gb2312具有这个特性

4.如果想兼容utf-8和unicode和gbk,那么可以4位16进制的字符截取,如果大于127,那么默认为中文,否则就是英文或字符或数字

这个函数是把数字或进制字符都转为10进制的数字,第二个参数radix表示的是第一个参数string的类型(10进制,2进制,8进制,16进制),我之前很白菜的理解为我想把第一个参数string转化成16进制。哎,我还是太年轻啊

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式