zoukankan      html  css  js  c++  java
  • 字符编码

    今天python中的字符编码又伤了我,有时间总结下

    什么是字符编码?

    首先要了解计算机中的文件的二进制模式和文本模式。对于计算机来说,一切内容都是“0”和“1”,任何东西要存入计算机或让计算机处理,都要转换成“0”和“1”的序列。而让人来理解一大串“0”、“1”序列,真的会比3*5=15还要难,但是人可以很容易的理解字符,不同的语言有不同的字符集合,比如英语的英语字母,汉语的汉字等。

    所以同样的内容既要表示计算机能理解的“0”、“1”序列,又要能表示让人能里的字符,两者可以相互转换,且是可重复的,不能同样的二进制序列,两次转换的字符不一样。

    这是就要有个人或者一个组织出来搞个标准,哪个字符对应哪个二进制序列,这个二进制序列就是对应字符的编码,大家都必须遵守这个转换规则,这样所有字符的字符编码集合出来了,叫做字符集。

    字符集-ASCII

    这是我们要介绍的第一个字符集,ASCII码一共规定了128个字符的编码,只包含了英文大小写字母,数字及一些常用的英文符号。如字符A的编码是十进制的65,字符a的编码是十进制的97,数字5的编码是十进制的53,这个字符比较少,直接上图:

    本地字符集

    计算机是美国人发明的,第一个字符集ASCII足够表示英语中的字符了。但是计算机很牛逼,除了美国人,其他国家的人也想用,但是其他国家语言的字符计算机还表示不了(茴香豆的茴字就有四种写法呢!);这是各个国家都制定了具有自己国际特色的字符集,比如支持汉字的GBK编码,支持日本的XXX编码,支持阿拉伯文、西班牙文的等等字符集。

    这些字符集都是本地字符集,之间不能相互兼容,同一份内容要让不同编码集的程序处理,就要转换成对应的编码,如果转换错了,不好意,乱码就出来了,有没有一种字符集能把所有的字符都表示出来,可以兼容所有的字符,这就是后来的Unicode,特别是随着互联网时代的到来,推动了Unicode的发展。

    字符集-Unicode

    Unicode字符集规定了所有字符对应的二进制序列,切兼容ASCII字符集,每一个字符都能在Unicode字符对照表中找到对应的二进制编码,但是Unicode只是规定了字符与二进制序列对应关系,没规定具体怎么实现到计算机中的存储(即怎么存储这个字符的二进制编码),Unicode的实现方式有UTF-8、UTF-16、UTF-32等等。。。互联网中使用最多的是UTF-8

    UTF-8

    UTF-8的实现方式有很多优点,巴拉巴拉的。。。。。

    UTF-8和Unicode的对应关系

    例子:

    引用

    文章 EBCDIC 与 GBK 的字符编码及其转换 中,关于字符集和字符编码的定义很好啊!

    字符集(Character Set),顾名思义,特定字符的集合。字符集并没定义字符的顺序,排序的方法以及其他更多的特性。字符集通常只是定义了字符的名字以及字符形状的外在表现 ;

    字符编码(Character Encoding),在定义好的字符集基础上,设计出一种方法 ( 或者算法 ), 将字符集的字符与二进制做一个映射,使得计算机能够识别和存储。

    参考

    维基百科-Unicode字符列表

    维基百科-字符编码

    维基百科-ASCII

    维基百科-UTF-8

    维基百科-UTF-16

    维基百科-UTF-32

    Unicode编码表

    字符编码笔记:ASCII,Unicode和UTF-8

    汉字Unicode编码表

    谈谈Unicode编码

  • 相关阅读:
    <O(n),O(1)>的LCA
    hdu6110
    ACM模板
    prufer编码
    UvaLive6893_The_Big_Painting
    HDU5669
    Codeforces786B
    二分图部分总结
    Git简介和Windows下安装步骤
    笔记本电脑插入耳机后无法使用解决办法
  • 原文地址:https://www.cnblogs.com/halu126/p/6646025.html
Copyright © 2011-2022 走看看