我正在查询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
答案 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所述。唯一的另一种可能性是数据是以错误的(意外)编码进入数据库或从数据库返回的。