Python3 中的中文编码问题

    最近重新看看了Python3,撸了点代码.被中文编码问题套路了下,查了不少资料,写了总结就作为第一篇博客吧,如果有什么问题或错误,请与我联系.

1 问题的根源

计算机不能直接识别字符(文本的最小单位)但能处理数字,于是把字符转变为数字进行处理.

所以任何信息,存放在存储介质中时,都是二进制流(比特流).

2 编码和解码

  • 编码过程: 字符转换成二进制流表示的过程。
  • 解码过程: 二进制流转换成字符的过程。
  • 编码规则: 编码和解码过程中遵循的规则,例如GBK编码,UTF-8编码.

3 字符编码

对于字符编码的一些描述可以参考廖雪峰的字符和编码

4 乱码是如产生的

由于编码和解码使用了不兼容的字符编码方式。

解决乱码问题,需要把握的要点

  • 输入某软件系统时字符所采用的编码是什么?(从数据库或文件读取时,原来存储时的编码是什么?从网页抓取时,网页的编码是什么?从控制台输入时,控制台的编码方式是什么?)
  • 软件系统中的编码方式是什么?(原本若是UTF-8存储,GBK编码的软件系统该如何处理?)
  • 输出时的编码方式是什么?(如Python脚本处理后的字符串是Unicode编码,输出到采用GBK编码的Windows控制台时应该做什么?)

5 Python3中字符编码问题

Python3 中对于字符串有两种对象str和bytes

两种对象的转换方法如下

Python3 : bytes –(decode)–> str –(encode)–> bytes

# -*- coding: utf-8 -*-
# 原始数据 utf-8编码的
data = '''这是一个测试程序'''
# 打印data的数据类型
print('data 的类型是', type(data))
# 将data转换为bytes对象
data_bytes = data.encode('utf-8')
print('data_bytes 的数据类型是', type(data_bytes))
# 以字节流的形式将数据存入a.txt
with open('a.txt', 'wb') as f1:
    f1.write(data_bytes)
#f1.close()
# 以字节流的形式读取数据
with open('a.txt', 'rb') as f2:
    data_read = f2.read()
print('data_read 数据是:', data_read)
print('data_read 转码后的数据是:', data_read.decode('utf-8'))
#f2.close()

# 或者更简单的用法.open函数可以编解码保存
with open('a.txt', 'w', encoding='utf-8') as f3:
    f3.write(data)
#f3.close()
with open('a.txt', 'r', encoding='utf-8') as f4:
    data_read2 = f4.read()
print('data_read2:', data_read2)
#f4.close()

 

转载于:https://my.oschina.net/u/3424590/blog/911376

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值