2010-03-17 55 views
1

我越来越错误::的UnicodeDecodeError

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

我使用intgerepropartystringpropartydatetimeproparty

回答

1

这是因为0xb0(十进制176)是不是在ASCII有效的字符代码(这间仅定义值0和127)。

检查你从哪里得到该字符串,并使用正确的编码。

如果您需要更多帮助,请发布代码。

1

您试图将Unicode数据(可能带有重音的文本)放入ASCII字符串中。

您可以使用Python的编解码器模块打开一个UTF-8编码的文本文件,并将Unicode数据写入它。

.encode方法还可以帮助(u"õ".encode('utf-8')例如)

0

的Python默认为ASCII编码 - 如果你正在处理的ASCII范围之外的字符,你需要指定在你的代码。

这样做的一种方法是在代码顶部设置编码定义。

这个片段设置编码在文件的顶部编码拉美-1(其中包括0xb0):

#!/usr/bin/python 
# -*- coding: latin-1 -*- 
import os, sys 
... 

See PEP for more info on encoding.

0

当我写我的外语“闪卡”的方案,我总是使用python 3.x作为它的本地编码是utf-8。编码问题通常会少得多。

如果你的程序,很多人将分享工作,但是,你可能要考虑使用encodedecode与Python 2.x中,但只有存储和检索的持久性存储的数据元素时。 encode您的非ASCII字符,以静默方式处理内存中这些unicode字符串的十六进制表示形式,并将它们保存为十六进制。最后,从持久存储中获取unicode字符串时使用decode,但仅限最终用户显示。这将消除你的程序中不断需要你的字符串encodedecode

@jcoon对这个问题也有相当标准的回应。