Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python unicode错误。UnicodeEncodeError:&x27;ascii';编解码器可以';t编码字符u'\u4e3a';_Python_Unicode_Encoding_Utf 8_Python 2.x - Fatal编程技术网

Python unicode错误。UnicodeEncodeError:&x27;ascii';编解码器可以';t编码字符u'\u4e3a';

Python unicode错误。UnicodeEncodeError:&x27;ascii';编解码器可以';t编码字符u'\u4e3a';,python,unicode,encoding,utf-8,python-2.x,Python,Unicode,Encoding,Utf 8,Python 2.x,因此,我有这段代码从url url = 'http://....' response = urllib2.urlopen(rul) string = response.read() data = json.loads(string) for x in data: print x['foo'] 问题是x['foo'],如果尝试如上所示打印它,我会遇到此错误 警告:第1行“说明”列的字符串值“\xE4\xB8\xBA Co…”不正确 如果我使用x['foo'].decode(“utf-

因此,我有这段代码从
url

url = 'http://....'
response = urllib2.urlopen(rul)
string = response.read()
data = json.loads(string)

for x in data: 
    print x['foo']
问题是
x['foo']
,如果尝试如上所示打印它,我会遇到此错误

警告:第1行“说明”列的字符串值“\xE4\xB8\xBA Co…”不正确

如果我使用
x['foo'].decode(“utf-8”)
我会得到以下错误:

UnicodeEncodeError:“ascii”编解码器无法对位置0中的字符u'\u4e3a'进行编码:序号不在范围内(128)

如果我尝试,
encode('ascii','ignore')。decode('ascii')
然后我得到了这个错误

x['foo'].encode('ascii','ignore').decode('ascii')) AttributeError:“非类型”对象没有属性“encode”

有什么方法可以解决这个问题吗?

x['foo'].解码(“utf-8”)
导致
unicode编码错误
意味着
x['foo']
unicode
类型。获取
str
类型并将其转换为
unicode
类型。Python2试图在这里提供帮助,并尝试将您的
unicode
隐式转换为
str
,以便您可以对其调用
decode
。它使用
sys.defaultencoding
,也就是
ascii
,无法对所有Unicode编码,因此出现了异常

这里的解决方案是删除
decode
调用-该值已经是
unicode

阅读Ned Batchelder的演示文稿——它将大大增强您对这一点的理解,并有助于防止将来出现类似错误

这里值得注意的是,
json.load
返回的所有内容都是
unicode
而不是
str


编辑后解决新问题:

当您打印
时,需要字节-unicode是一个抽象概念。您需要从抽象unicode字符串到字节的映射-在python术语中,您必须将
unicode
对象转换为
str
。您可以通过调用
encode
来实现这一点,编码告诉它如何将抽象字符串转换为具体字节。通常,您希望使用utf-8编码

这应该起作用:

print x['foo'].encode('utf-8')

阅读,谢谢你的链接。我会看一看,但是现在,如果有一个答案就好了,因为我确信,即使在删除
decode
时,我也会出错。数组中的所有其他列表都很好,但有时
x['foo']
包含表情符号,这就导致了问题。这回答了您发布的问题;如果你的应用程序中出现其他错误,那是因为你仍然犯同样的错误(混淆了unicode和str类型)。阅读此链接可以提供一些非常深入的解释和指导,以防止在allI发生这种情况,我很抱歉。我原以为这样就可以了,但我得到了
警告:第1行的'foo'列的字符串值不正确:'\xE4\xB8\xBA Co..。
使用您建议的
x['foo'].encode('utf-8')
。我真的需要
导入
一些库才能使编码工作吗?@arbi-g11324115是
打印
给了你这个错误还是别的什么?我想特别提出一个新问题,因为听起来您使用的数据库库不能很好地处理unicode。在我的脑海中,因为你提到了表情符号,你可能正在运行一个有点旧的mysql版本?一些表情符号是unicode标准的新版本,mysql的旧版本不支持它yetMaybe就是这样。我真的不知道。我使用的是mysql 5.4,下面是我如何设置unicode
conn=MySQLdb.connect(“****”、“root”、“****”、“****”、“****”)conn.set\u character\u set('utf8')cursor=conn.cursor()cursor.execute('set NAMES utf8;'))cursor.execute('set character set\u connection=utf8;'))cursor.execute('set character\u set\u connection=utf8;'))