如何将其转换为unicode以便正确显示?

时间:2013-04-28 20:51:40

标签: python mysql

我正在查询MySQL工作台中返回以下值的数据库:

VitóriadaConquista

应显示为:

VitóriadaConquista

无论我尝试过什么,我都无法将'Vit \ xc3 \ xb3ria da Conquista'转换为'VitóriadaConquista'

#Querying MySQL "world" database
print "====================================="
query = 'select name from city where id=283;'
cursor.execute(query)
cities = cursor.fetchall()
print cities
for city in cities:     
    cs = str(city)
    cs = cs[3:-3].decode('utf-8')
    print cs
    print cs.decode('utf-8')
    print cs.encode('ascii','ignore')

输出如下:

=====================================
[(u'Vit\xc3\xb3ria da Conquista',)]
Vit\xc3\xb3ria da Conquista
Vit\xc3\xb3ria da Conquista
Vit\xc3\xb3ria da Conquista

3 个答案:

答案 0 :(得分:1)

嗯,这确实奏效了。我不确定为什么。但我得到的是VitóriadaConquista 的正确值。我想了解发生了什么。

#Querying MySQL "world" database
query = 'SELECT CONVERT(CAST(Name as BINARY) USING utf8) from city where id = 283;'
cursor.execute(query)
cities = cursor.fetchall()
for tup in cities:     
    cs=tup[0]
    print cs

答案 1 :(得分:0)

如果进入的数据是UTF-8(看起来像是这样),请使用(在Python 2中),unicode()将其从字节转换为Python Unicode字符串:

cs = unicode(cs[3:-3], "utf-8")

基本规则:在代码中,始终使用Unicode字符串。使用unicode()输入数据和encode()输出数据进行转换。

答案 2 :(得分:0)

你正在获取unicode字符串,存储在元组列表中,这就是fetchall所做的事情。所以你根本不需要编码或解码。试试这个:

#Querying MySQL "world" database
print "====================================="
query = 'select name from city where id=283;'
cursor.execute(query)
cities = cursor.fetchall()
for tup in cities:     
    cs = tup[0]
    print cs

如果打印不正确,那么您的终端可能会出现问题,如@Jarrod Roberson所述。唯一的另一种可能性是数据是以错误的(意外)编码进入数据库或从数据库返回的。