最近在写python的时候在windows下和linux下执行一些命令遇到一些中文显示问题,这些字符集的错误,特地上网找了找关于这些的总结

1.系统,文件中的编码设置和查看

  • linux中vim下查看文件编码的命令 set fileencoding。
  • 一般情况下window默认编码gbk,linux默认编码utf8。
  • python编程中 系统编码,python编码,文件编码 的概念。
    • 系统编码:默认写源码的编辑器的编码方式。它代表源码文件内的所有内容都是根据词方式编码成二进制码流。存入到磁盘中的。linux下通过locale命令查看。
    • python编码:指python内设置的解码方式。如果不设定的话,python默认的是ascii解码方式。
    • 设定方法:在源码文件开头(一定是第一行):#--coding:UTF-8--,源码文件的设置解码方式是UTF-8。

2.python中encode()和decode()函数

从英文意思上看,encode和decode分别指编码和解码,在python中,Unicode类型是作为编码的基础类型,即如下图:
eclipse

  • 以下为在linux平台,默认utf-8:
  • 用 ‘中文’(UTF-8)—-> ‘中文’(Unicode)—-> ‘中文’(GBK):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    >>> u = '中文'
    >>> type(u)
    <type 'str'>
    >>> str1
    u'\u4e2d\u6587'
    >>> str1 = u.decode('utf-8')
    >>> type(str1)
    <type 'unicode'>
    >>> u
    '\xe4\xb8\xad\xe6\x96\x87'
    >>> str2 = str1.encode('gbk')
    >>> type(str2)
    <type 'str'>
    >>> str2
    '\xd6\xd0\xce\xc4'

3.关于编码ASCII、Unicode、GBK、UTF-8等

  • ASCII码是美国早期制定的编码规范,只能表示128个字符,包括英文字符、阿拉伯数字、西文字符以及32个控制字符。
    • 扩展ASCII码,简单而言,扩展ASCII码的出现是因为ASCII不够用,所以向ASCII表继续扩充到256个符号。
  • Unicode准确来说不是编码格式,而是字符集。这个字符集包含了世界上目前所有的符号。
    另外,在原来有些字符可以用一个字节即8位来表示的,在Unicode将所有字符的长度全部统一为16位,因此字符是定长的。
  • GB2312,在ASCII码表的基础上,小于127的字符意义与原来相同;而将两个大于127的字节连在一起,来表示汉字,前一个字节从0xA1(161)到0xF7(247)共87个字节,称为高字节,后一个字节从0xA1(161)到0xFE(254)共94个字节,称为低字节,两者可组合出约8000种组合,用来表示6763个简体汉字、数学符号、罗马字母、日文字等。
    在重新编码的数字、标点、字母是两字节长的编码,这些称为“全角”字符;而原来在ASCII码表的127以下的称为“半角”字符。

    • GBK,简单而言,GBK是对GB2312的进一步扩展(K是汉语拼音kuo zhan(扩展)中“扩”字的声母)。
    • GB18030,GB18030支持少数民族的汉字,也包含了繁体汉字和日韩汉字。
  • UTF是在互联网上使用最广的一种Unicode的实现方式,我们最常用的是UTF-8,表示每次8个位传输数据,除此之外还有UTF-16。

总结:

  • 中国人民通过对 ASCII 编码的中文扩充改造,产生了 GB2312 编码。
  • 汉字实在是太多了,包括繁体和各种字符,于是产生了 GBK 编码
  • 中国是个多民族国家,各个民族几乎都有自己独立的语言系统,为了表示那些字符,继续把 GBK 编码扩充为 GB18030 编码。
  • 每个国家都像中国一样,把自己的语言编码,于是出现了各种各样的编码,如果你不安装相应的编码,就无法解释相应编码想表达的内容。
  • 有个叫 ISO 的组织看不下去了。他们一起创造了一种编码 UNICODE ,这种编码非常大,大到可以容纳世界上任何一个文字和标志。所以只要电脑上有 UNICODE 这种编码系统,无论是全球哪种文字,只需要保存文件的时候,保存成 UNICODE 编码就可以被其他电脑正常解释
  • UNICODE 在网络传输中,出现了两个标准 UTF-8 和 UTF-16,分别每次传输 8个位和 16个位。
  • 既然有了这么好的编码格式,为什么还要用GBK等呢,因为UTF-8等格式体积大,占用电脑空间比较大,如果使用群体大部分使用中文,GBK也是可以的。