我用pymssql来解决这个问题。我有一个mssql db,其编码是gbk,但似乎pymssql不支持这个。当我使用'gbk'作为字符集时,它会抛出OperationalError 20017
一些无用的消息,而当我尝试'cp936'时它就会崩溃......
我可以与'UTF-8'成功连接并可以用sqlstr.encode('utf-8')
执行查询,问题是它返回包含非unicode内容的unicode sting。
例如,一个查询返回一个unicode字符串u'Port 26 \xb5\xe7'
,但这是错误的,它不是一个unicode字符串,它根本不能解码/编码,它应该是'Port 26 \xb5\xe7'
(对于python 2.x),因此它可以用gbk解码并获得正确的结果
所以我的任务是从unicode字符串中提取原始内容。好吧,我想我可以用repr做一些字符串截断,然后调用eval,但我只是想知道是否有更多的pythonic方式?
答案 0 :(得分:2)
这样做你想要的吗?
>>> myString = u'Port 26 \xb5\xe7'
>>> print myString.encode('latin1').decode('gbk')
Port 26 电
事实上,您可以使用其中任何一种作为编码编解码器:
cp1250
cp1252
cp1254
cp1256
cp1258
latin_1
iso8859_3
iso8859_9
iso8859_15
拉丁1是你最好的选择(最具包容性)。列出的cp编解码器都是基于Windows的。