1

我用 pymssql 来解决这个问题。我有一个编码为 gbk 的 mssql db,但 pymssql 似乎无法支持这一点。当我使用'gbk'作为字符集时,它会抛出OperationalError 20017一些无用的消息,而当我尝试'cp936'时,它就会崩溃......

我可以使用 'UTF-8' 成功连接并可以使用 执行查询sqlstr.encode('utf-8'),问题是它返回包含非 unicode 内容的 unicode 字符串。

例如,一个查询返回一个 unicode 字符串u'Port 26 \xb5\xe7',但这是错误的,它不是一个 unicode 字符串,它根本无法解码/编码,它应该是'Port 26 \xb5\xe7'(对于 python 2.x),因此可以用 gbk 解码并得到正确的结果

所以我的任务是从 unicode 字符串中提取原始内容。好吧,我想我可以从 repr 用一些字符串截断来做到这一点,然后在上面调用 eval ,但我只是想知道还有更多的 Pythonic 方式吗?

4

1 回答 1

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

latin1 是您的最佳选择(最包容)。列出的 cp 编解码器都是基于 Windows 的。

于 2013-04-22T07:18:51.003 回答