python编码问题汇总

1.BOM问题

python读取文件时常会出现如下异常:

print (file.read().decode(‘utf-8’)).encode(‘gbk’)
UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\ufeff’ in position 0: illegal multibyte sequence

这是因为有些软件在保存UTF-8编码时,会在文件最开始的时候插入不可见的字符BOM(0xEF 0xBB 0xBF,即BOM),这些不可见的字符无法被解析,它们是用来区分Unicode big endian和Unicode little endian(即高字节写在前面还是后面)的,可以利用codecs模块处理这个问题:

import codecs
content = open('test.txt', 'r').read()
filehandler.close()
if content[:3] == codecs.BOM_UTF8:
    content = content[3:]
print (content.decode('utf-8'))

2.读Unicode文件时出现无法解码问题

windows下用记事本保存带中文的文本时,可以保存为utf-8或Unicode。Unicode分为大端格式(Big endian)和小端格式(little endian),不管用哪一种格式保存,当用python打开该文件时,会出现无法解码的问题,即抛出如下异常:

content = file.read()
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xff in position 0: illegal multibyte sequence

上述异常是打开小端格式的文件时抛出的,打开大端格式的文件时起始位置则是0xfe。
抛出上述异常是因为python默认编码是ANSI,无法打开unicode编码文件,可以通过sys.setdefaultencoding() 来修改(要调用sys.setdefaultencoding 函数,需要重载sys 模块,即reload sys),也可以在open函数时设定参数encoding来解决:

with open("test3.txt", encoding="utf-16") as file:
    content = file.read()

utf-16代表unicode编码格式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值