python - 在python 3中读取香港补充字符集
问题描述
我有一个 hkscs 数据集,我试图在 python 3 中读取。下面的代码
encoding = 'big5hkscs'
lines = []
num_errors = 0
for line in open('file.txt'):
try:
lines.append(line.decode(encoding))
except UnicodeDecodeError as e:
num_errors += 1
它给我带来了错误UnicodeDecodeError: 'utf-8' codec can't decode byte 0xae in position 0: invalid start byte
。似乎数据集中有一个代码无法解码的非 utf-8 字符。
我尝试errors = ignore
在这一行
添加lines.append(line.decode(encoding, errors='ignore'))
但这并不能解决问题。
有人可以建议吗?
解决方案
如果文本文件包含使用非默认编码编码的文本,则必须在打开文件时指定编码以避免解码错误:
encoding = 'big5hkscs'
path = 'file.txt'
with open(path, 'r', encoding=encoding,) as f:
for line in f:
# do something with line
或者,可以以二进制模式打开文件,然后对文本进行解码:
encoding = 'big5hkscs'
path = 'file.txt'
with open(path, 'rb') as f:
for line in f:
decoded = line.decode(encoding)
# do something with decoded text
在这个问题中,文件在没有指定编码的情况下打开,因此它的内容会使用默认编码自动解码 - 在这种情况下显然是 UTF-8。
推荐阅读
- r - 如何将列表分配为数据表中的观察?
- java - 不同的虚拟主机在相同的条件下会给出不同的响应吗?
- python - 在 Django 单元测试中查询数据库
- scala - 如何在 Scala 中使用另一个选项 getOrElse
- javascript - 从 Promise 回调中导航
- python - setup.py 中的 spaCy 和 spaCy 模型
- ffmpeg - 如何使用 FFMPEG 向来自网络摄像头 (v4l2) 的实时流添加延迟?
- r - 使用R中的for循环向数据表添加行
- ruby - 数组方法的范围
- python - 无法从 Python 连接到在 Azure Linux VM 上运行的 Redis 实例