0

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

征服者维多利亚

应显示为:

维多利亚达康基斯塔

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

#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
4

3 回答 3

1

嗯,这确实奏效了。但是我不确定为什么。但我得到了Vitória da Conquista的正确价值。但是,我想了解正在发生的事情。

#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
于 2013-04-29T05:56:11.750 回答
0

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

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

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

于 2013-04-28T21:06:19.303 回答
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 所述。唯一的另一种可能性是数据以错误的(意外)编码输入或正在从数据库返回。

于 2013-04-29T00:28:19.243 回答