1

我有一个文本样本:

"PROTECTING-ħarsien",

我正在尝试使用以下内容进行解析

import csv, json

with open('./dict.txt') as maltese:
    entries = maltese.readlines()
    for entry in entries:
        tokens = entry.replace('"', '').replace(",", "").replace("\r\n", "").split("-")
        if len(tokens) == 1:
            pass
        else:   
            print tokens[0] + "," + unicode(tokens[1])

但我收到一条错误消息

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128)

我究竟做错了什么?

4

2 回答 2

2

似乎dict.txt是 UTF-8 编码的(ħ0xc4 0xa7UTF-8 中)。

您应该将文件打开为 UTF-8,然后:

import codecs
with codecs.open('./dict.txt', encoding="utf-8") as maltese:
    # etc.

然后,您将使用 Unicode 字符串而不是字节字符串;因此,您不需要调用unicode()它们,但您可能必须将它们重新编码为您要输出到的终端的编码。

于 2013-06-25T08:26:14.430 回答
0

您必须将最后一行更改为(这已经过测试可以处理您的数据):

print tokens[0] + "," + unicode(tokens[1], 'utf8')

如果你没有 that utf8,Python 假定源是ascii编码的,因此会出现错误。

http://docs.python.org/2/howto/unicode.html#the-unicode-type

于 2013-06-25T08:25:14.440 回答