Python 德语变音符号问题 - 'ascii'编解码器无法解码位置 15 中的字节0xe4:序号不在范围内(128)



我正在从csv文件中读取数据并将数据保存到我的模型中。

with open(settings.MEDIA_ROOT + '\f.csv', 'rb') as f:
    reader = csv.reader(f,delimiter=';')
    for row in reader:
        uname =  u"'" + row[2]+"'".encode('utf-8')
        u = University(name=uname)
        u.save()

我在文件中有一个词:Westfälisch. 这是代码卡住的单词。

这是错误消息:

'ascii' codec can't decode byte 0xe4 in position 15: ordinal not in range(128)
The string that could not be encoded/decoded was: Westf�lisch

我做错了什么?请帮忙。

shhdup的回答显示了如何正确地做到这一点,但没有解释你做错了什么。


收到错误的实际原因是您正在添加 u"'" ,这是一个unicode对象,row[2] ,这是一个str对象。连接unicodestr(按任一顺序(使用sys.getdefaultencoding()自动解码str,这几乎总是'ascii'

此问题有两个原因。首先,这个:

u"'" + row[2]+"'".encode('utf-8')

相当于这个:

u"'" + row[2] + ("'".encode('utf-8'))

。而不是:

(u"'" + row[2] + "'").encode('utf-8')

但是,即使您修复了这个问题,您仍然会在参数中将 Unicode 和字节字符串一起添加。所以你要么想要这个:

u"'" + row[2].encode('utf-8') + u"'"

。或

("'" + row[2] + "'").encode('utf-8')

您还使用encode而不是decode

而且,即使您的数据是拉丁语-1,您也是'utf-8'而不是'Latin-1'

但是你的代码还不够远,以至于其中任何一个都很重要。这些问题都不会给你带来的错误。

uname =  ("'" + row[2]+"'").decode('utf-8') # Just that you need

最新更新