阅读python 3中的香港补充字符集
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阅读python 3中的香港补充字符集相关的知识,希望对你有一定的参考价值。
我有一个试图在python 3中读取的hkscs数据集。下面的代码
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。
看起来好像我不添加except
子句except UnicodeDecodeError as e
,效果很好
encoding = 'big5hkscs'
lines = []
path = 'file.txt'
with open(path, encoding=encoding, errors='ignore') as f:
for line in f:
line = '\t' + line
lines.append(line)
snakecharmerb的答案是正确的,但可能需要解释。
您不是在原始问题中写的,但我认为您在for
行上有错误。在这一行中,您正在从UTF-8解码文件(可能是您环境中的默认文件,而不是Windows上的默认文件),但是稍后您尝试再次对其进行解码。因此错误不是关于解码big5hkscs
,而是关于将文件作为文本打开。
就像snakecharmerb的正确答案(第二部分)一样,您应该将文件打开为二进制文件,这样就无需解码文本,然后可以使用line.decode(encoding)
解码文本。注意:我不确定您是否可以读取二进制文件上的lines。这样,您仍然可以捕获错误,例如写一条消息。否则,通常的方法是在open()
时解码,但是这样一来,您就失去了后退功能并获得更好的错误消息(例如行号)的能力。
以上是关于阅读python 3中的香港补充字符集的主要内容,如果未能解决你的问题,请参考以下文章