• 字符编码个人理解


    总结:ASCII码只占一个字节,不包含汉字;GBK汉字国标扩展码,就是所谓的中国码,兼容ASCII码,汉字包含两个字节;Unicode万国码,兼容所有国家文字;UTF-32,所有字符都占4个字节,导致资源浪费;UTF-8是针对Unicode的一种可变长度字符编码,一个US-ASCIl字符只需1字节编码,带有变音符号拉丁文希腊文西里尔字母亚美尼亚语希伯来文阿拉伯文叙利亚文等字母则需要2字节编码,中日韩文字、东南亚文字、中东文字等需要3个字节,少部分字符需要4个字节。

    ASCII码(最早出现的)

    它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。

    常见ASCII码的大小规则:数字< 大写字母 < 小写字母。

    1.数字比字母要小。如 “7”<“F”;

    2.数字0比数字9要小,并按0到9顺序递增。如 “3”<“8” ;

    3.字母A比字母Z要小,并按A到Z顺序递增。如“A”<“Z” ;

    4.同个字母的大写字母比小写字母要小32。如“A”<“a” 。

    几个常见字母的ASCII码大小: “A”为65;“a”为97;“0”为 48 [4]  

    问题:

    用128个符号编码便可以表示所有,但是用来表示其他语言,128个符号是不够的。比如到了中国,128个字符完全不够啊,怎么办呢?就有了GBK

    GBK

    GBK: 汉字国标扩展码,基本上采用了原来GB2312-80所有的汉字及码位,并涵盖了原Unicode中所有的汉字20902,总共收录了883个符号, 21003个汉字及提供了1894个造字码位。

    GB2312和GBK

    • GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;GBK共收入21886个汉字和图形符号。
    • GB2312对任意一个图形字符都采用两个字节表示,并对所收汉字进行了“分区”处理,每区含有94个汉字/符号,分别对应第一字节和第二字节。GBK采用双字节表示,总体编码范围为8140-FEFE之间,首字节在81-FE之间,尾字节在40-FE之间。
    • 对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK 及GB18030 汉字字符集的出现。

    GBK中如何区分中文和英文的呢?

    很简单,比如底层是根据首位来判断是中文还是英文,汉字的第一个字节必须是1。如 我a你 ,会是1xxxxxxx xxxxxxxx 0xxxxxxx 1xxxxxxx xxxxxxxx ,1xxxxxxx xxxxxxxx代表一个汉字,0xxxxxxx代表一个英文字符,1xxxxxxx xxxxxxxx又代表一个汉字

    问题:

    gbk基本包含了所有的汉字,但是到了其他国家呢?比如日文、韩文、阿拉伯文等的字符又没有,怎么办?有用另一套字符编码,每个国家都整一套,那不乱套了吗?所有出现了Unicode.

    Unicode

    世界上存在着多种编码方式,在ANSi编码下,同一个编码值,在不同的编码体系里代表着不同的字。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码,可能最终显示的是中文,也可能显示的是日文。在ANSI编码体系下,要想打开一个文本文件,不但要知道它的编码方式,还要安装有对应编码表,否则就可能无法读取或出现乱码。为什么电子邮件和网页都经常会出现乱码,就是因为信息的提供者可能是日文的ANSI编码体系和信息的读取者可能是中文的编码体系,他们对同一个二进制编码值进行显示,采用了不同的编码,导致乱码。这个问题促使了unicode码的诞生。

    如果有一种编码,将世界上所有的符号都纳入其中,无论是英文、日文、还是中文等,大家都使用这个编码表,就不会出现编码不匹配现象。每个符号对应一个唯一的编码,乱码问题就不存在了。这就是Unicode编码。

    Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,“汉”这个字的Unicode编码是U+6C49。

    问题:

    Unicode固然统一了编码方式,但是它的效率不高,比如UCS-4(Unicode的标准之一)规定用4个字节存储一个符号,那么每个英文字母前都必然有三个字节是0,这对存储和传输来说都很耗资源。

    UTF-8

    UTF-8使用1~4字节为每个字符编码

    如何区分中文和英文的呢?

    固定格式,一个字节以0开头,两个字节,第一个字节必须以110开头,第二个字节必须是10开头,三个字节,第一个字节必须是1110开头,第二个字节必须是10开头,第三个字节必须是10开头,如图:

    0xxxxxxx 英文字符和数字 1个字节
    110xxxxx 10xxxxxx 两个字节
    1110xxxx 10xxxxxx 10xxxxxx 汉字 3个字节
    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 4个字节
    
    

  • 相关阅读:
    Prompts(一)
    【ENVI精讲】处理专题五:基于像元二分模型的植被覆盖度反演
    在普通频道输入字符串如果是pi,则给出信息~!
    libcurl与分片传输、断点续传相关研究
    深度学习 opencv python 实现中国交通标志识别 计算机竞赛
    Linux的磁盘分区,格式化,挂载
    pwn入门(1)二进制基础
    【C语言】 01.C语言常见概念
    分布式一致性协议 之 Lease机制
    如何自定义代码生成器(上)
  • 原文地址:https://blog.csdn.net/jg_csdn/article/details/133315108