python中文编码中文乱码问题

编码的本质

用于描述文字与二进制的对应关系

非Unicode的编码直接不能互相识别

编码的发展

ASCII

  • 最早的编码

  • 一个字节表示字母☛数字☛字符

  • 128个

    • 最高位 为 0

      • 留下备用

gbk

  • 国标码
  • 兼容 ASCII
  • 两个字节表示汉字

unicode

  • 每个国家都有自己的编码

  • 一套统一的编码

  • 兼容所有编码方式

  • 一个字符用4个字节表示

    • 浪费空间
  • python中所有的数据都是Unicode编码存在

    • 除去 bytes 类型
  • 计算机内存采用Unicode编码方式

  • 核心地位的编码

utf-8

  • 从Unicode升级过来的

  • 一个字节表示英文

  • 两个字节表示欧洲文字

  • 三个字节表示汉字

    • 汉字有9万多个
    • 日本文字有12万多个

编码

Unicode编码

  • 内存里面的表示方式

非Unicode编码

  • 硬盘内容的存储
  • 网络传输

strきbytes

str

  • 编码方式Unicode

  • 字符串

    • 单位☛字符

bytes

  • 编码方式→非Unicode

  • 字节流

    • 单位☛字节

编码☛解码问题

有编码才需要解码

编码方式和解码方式不一致会报错

  • UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xbb in position 1: invalid start byte

Unicode转为非Unicode,叫做编码

  • s = ‘中国’

  • s.encode(’utf-8‘)

    • unicode编码的字符串, 转为 utf-8的字节流
  • 结果

    • s = b’\xe4\xb8\xad\xe5\x9b\xbd’

非Unicode转为Unicode,叫做解码

  • s = b’\xe4\xb8\xad\xe5\x9b\xbd’

  • s.decode(‘utf-8’)

    • utf-8的字节流☛Unicode的字符串
  • 结果

    • s = ’中国‘

gbk与utf-8编码的转换

字节流表示

  • 原文

    • s0 = ‘a黄宏辉’
  • gbk

    • s1 = b’a\xbb\xc6\xba\xea\xbb\xd4’
  • utf-8

    • s2 = b’a\xe9\xbb\x84\xe5\xae\x8f\xe8\xbe\x89’
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值