字符编码

发布时间 2023-12-04 14:45:34作者: 小满三岁啦

友情链接1友情链接2

unicode与gbk的映射表

汉字字符集编码查询

ASCII表

1、只支持英文字符串

2、采用8位二进制对应一个英文字符串

ASCII表的特点:

1、只有英文字符与数字的一一对应关系

2、一个英文字符对应1Bytes,1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符

GBK表

  1. 支持英文字符、中文字符
  2. 采用8位(8Bit=1Bytes)二进制对应一个英文字符串
  3. 采用16位(16Bit=2Bytes)二进制对应一个中文字符串

GBK表的特点:

1、只有中文字符、英文字符与数字的一一对应关系

2、一个英文字符对应1Bytes 一个中文字符对应2Bytes

Unicode

很多地方或老的系统、应用软件仍会采用各种各样传统的编码,这是历史遗留问题。
此处需要强调:软件是存放于硬盘的,而运行软件是要将软件加载到内存的;
面对硬盘中存放的各种传统编码的软件,想让我们的计算机能够将它们全都正常运行而不出现乱码,内存中必须有一种兼容万国的编码,并且该编码需要与其他编码有相对应的映射/转换关系,这就是unicode第二大特点产生的缘由

注意:内存中统一使用Unicode(文本编辑器输入任何字符在内存中都是Unicode编码的)

  1. 兼容万国字符,与万国字符编码都有对应关系
  2. 采用16位(16Bit=2Bytes)二进制数对应一个中文字符串,个别生僻字会采用4Bytes,8Bytes
# 英文字符可以被ASCII识别
英文字符--->unciode格式的二进制--->ASCII格式的二进制

# 中文字符、英文字符可以被GBK识别
中文字符、英文字符--->unicode格式的二进制--->gbk格式的二进制

# 日文字符、英文字符可以被shift-JIS识别
日文字符、英文字符--->unicode格式的二进制--->shift-JIS格式的二进制

Unicode表

                              内存
字符---------------------Unicode格式的数字-----------------		
						     |                         |
						     |                         |
						     |                         |
						   硬 盘                        |
						     |                         |
						     |                         |
					         |                         |
					  GBK格式的二进制           Shit-JIS格式的二进制

					     

老的字符编码都可以转成Unicode,单不能通过Unicode互转

UTF-8

  • 英文 ----》 1Bytes
  • 汉字 ----》 3Bytes

image-20231204133013889

结论

  1. 内存固定使用Unicode,我们可以改变的是存入硬盘采用格式

    英文 + 汉字  ----》 Unicode  ----》 gbk
    英文 + 日文  ----》 Unicode  ----》 shift-jis
    万国字符     ----》 Unicode  ----》 utf-8
    
  2. 文本文件存取乱码问题

    存乱了:解决方法是,编码格式应该设置成支持文件内容字符串的格式

    取乱了:解决方法是,文件是以什么编码格式存入硬盘的,就应该以什么编码格式读入内存。

  3. python默认读文件的编码:

    python3默认utf-8

    python2默认ASCII

    指定文件编码

    py文件的首行写、只需要在主文件加文件头。

    # coding:utf-8 (按当初存入的编码为准)
    
  4. 保存运行python程序的前两个阶段不乱码的核心法则

    指定文件头

    # coding:文件当初存入硬盘时所采用的编码格式
    
  5. python3str类型默认直接存成Unicode格式,无论如何都不会乱码

    保存python2str类型不乱码

    x = u'上'在字符串前面加一个u强制转成Unicode

  6. 了解

    python2解释器有两种字符串类型: str 以及 Unicode

    # str类型
    x = '上' # 字符串值会按照文件头指定的编码格式存入变量值的内存空间
    
    # Unicode类型
    x = u'上' # 强制存成Unicode
    

    编码:Unicode 转成 其他编码

    解码:其他编码转成 Unicode

    用什么去编码,就要用什么去解码,推荐用utf-8去编码和解码

    x = '上'
    res = x.decode('gbk')  # Unicode编码成gbk
    print(res, type(res))
    
    >>> b'\xc9\xcf' <class 'bytes'>
    
    
    text = res.decode('gbk')
    print(text)
    
    >>> 上
    
  7. 默认编码

    1. pycharm默认的终端编码是utf-8
    2. mac的终端默认也是utf-8
    3. win10 cmd的终端默认是GBK

最后再提示一下,Python只要出现各种编码问题,无非是哪里的编码设置出错了
常见编码错误的原因有:

  • Python解释器的默认编码
    • Python源文件文件编码
    • Terminal使用的编码
    • 操作系统的语言设置