2011-03-15 92 views
0

我有波兰语单词“WAZ”,这意味着“蛇”无法转换ASCII为UTF-8在python

,但我从ASCII web服务得到它,所以:

snake_in_polish_in_ascii="w\xc4\x85\xc5\xbc" 

有结果我想:

print str(snake_in_polish_in_ascii) #this prints me w─ů┼╝ 

snake_in_polish_in_ascii.decode('utf-8') 
print str(snake_in_polish_in_ascii) #this prints me w─ů┼╝ too 

和验证码:

print str(snake_in_polish_in_ascii.encode('utf-8')) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 1: ordinal not in range(128) 

我使用的是永井,在Windows XP时波兰文化:产生异常。

在文件的顶部,我有:

# -*- coding: utf-8 -*- 

我无法找到一个方法来解决这个问题。为什么我不能在输出中获得“wąż”?

+0

在Mac OS X我只需打印 “W \ XC4 \ X85 \ XC5 \命苦” 的事情得到正确的输出。确保你的终端支持unicode。你也可以尝试'decode'而不是'encode'来将字符串转换成'unicode'对象。 – 2011-03-15 12:58:51

+4

您不可能*实际*以ASCII接收该单词,因为第二个和第三个字符不能用ASCII表示。 Web服务很可能使用UTF-8,但不能保证。像亚历克斯,我怀疑你的*显示*问题是由于你的终端。 – 2011-03-15 12:59:59

回答

7

这个表达式:

snake_in_polish_in_ascii.decode('utf-8') 

不改变字符串代替尝试这样的:

print snake_in_polish_in_ascii.decode('utf-8') 

关于为什么当你做print snake_in_polish_in_ascii你看到w─ů┼╝的原因是因为你的终端使用cp852编码(中欧和东欧)试试这样看:

>>> print snake_in_polish_in_ascii.decode("cp852") 
w─ů┼╝ 
4
>>> i="w\xc4\x85\xc5\xbc" 
>>> print i.decode('utf-8') 
wąż 
0

例子:

snake_in_polish_in_ascii = 'w\xc4\x85\xc5\xbc' 
print snake_in_polish_in_ascii.decode('cp1252').encode('utf-8')