在扔西红柿之前,让我解释一下我的问题(我首先阅读了pythonicode文档)。在
我使用json模块将json格式的结果解析为字典。这给了我unicode编码的字符串(例如:u“My string t\xf4t”)。然后我使用Mysqldb将这个字符串存储在Mysql数据库中。我确信这些数据库是为utf8配置的。在
然后我检索Mysql记录,仍然使用MysqlDB。现在打印的结果看起来像“my string t\xf4t”(没有u)。 因为我需要比较插入的和检索到的字符串,所以我必须告诉python我的检索字符串是unicoded的。在
不管我怎么做,我都有一个独创性的错误。我尝试使用编码:unicode(storedInDB,“utf_8”)和错误param(“replace”)。但我还是有例外。在
你有什么提示吗?在
谢谢你的帮助!在
u"My string t\xf4t"
是一个Unicode字符串(它的类型是unicode
),但是{str
)。在unicode(storedInDB, "utf_8")
试图将bytestring解码为UTF-8,但是"My string t\xf4t"
不是有效的UTF-8。在最有可能的是,您要做的是将
charset='utf8'
添加到MySQLdb.connect()
调用中。在对于MySQL本身,字符集是在许多不同的上下文中单独设置的——最明显的是,对于表存储和连接(不幸的是,MySQL在许多情况下似乎仍然默认为拉丁语-1)。因此,例如,您可以麻烦地将整个数据库设置为使用UTF-8:
然而,当你连接一个客户端时,MySQL可能仍然认为你在用其他编码与它通信:
^{pr2}$一个基本的解决方案是在连接后立即执行
SET NAMES UTF8
,然后再执行其他操作:但是,在您的例子中,这仍然是不够的,因为pythonmysqldb模块本身也希望对您有所帮助并自动对python的本机unicode字符串进行编码/解码。所以,你必须在MySQLdb中设置字符集。如前所述,最好在创建MySQLdb连接时传递
charset='utf8'
。(这也会导致MySQLdb通知mysql服务器您的连接正在使用UTF8,因此您不需要直接运行SET NAMES UTF8
)虽然您为UTF-8配置了MySql,但实际上并没有将UTF-8数据写入其中。在发送字符串之前,您必须将Unicode编码为UTF-8。在
相关问题 更多 >
编程相关推荐