问题描述
我刚刚运行了曾经在 Python 2.7 中运行的代码,用于 3.7(通过 miniconda)。它基本上是由土地登记处生成的用于解析 CSV 寻址数据的库。
但是,我收到此错误:
Traceback (most recent call last):
File "AddressBasePremium_RecordSplitter37.py",line 730,in <module>
main()
File "AddressBasePremium_RecordSplitter37.py",line 726,in main
createCSV()
File "AddressBasePremium_RecordSplitter37.py",line 507,in createCSV
for row in csvreader:
File "C:\ProgramData\Miniconda3\lib\encodings\cp1252.py",line 23,in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 3130:
character maps to <undefined>
在 VSCode 中打开 CSV 文件它告诉我该文件是 UTF-8(或者它认为),所以我有点难住。故障字符如下所示。我怎样才能解决这个问题?我认为是 UTF-8 没问题,但鉴于它是一个额外的字符,它必须是 UTF-16 或其他一些 unicode 字符集?我觉得这有点奇怪,因为我认为数据是来自英国土地注册处的 UTF-8。
代码本质上是这样的:
with open(filepath) as f:
csvreader = csv.reader(
f,delimiter=",",doublequote=False,lineterminator="\n",quotechar='"',quoting=0,skipinitialspace=True,)
try:
for row in csvreader:
abtype = row[0]
if "10" in abtype:
write10.writerow(row)
counter10 += 1
解决方法
你必须为 open 函数指定编码:
对于 utf-8 文件,您可以这样做:
with open(filepath,"r",encoding="utf-8")
说明:你的文件是以cp1252编码读取的,但是cp1252(https://en.wikipedia.org/wiki/Windows-1252)中不存在字符0x81。