1

私はpymssqlでこの問題に遭遇しました。エンコーディングが gbk の mssql データベースがありますが、pymssql はこれをサポートできないようです。「gbk」を文字セットとして使用するOperationalError 20017と、役に立たないメッセージがスローされ、「cp936」を試すとクラッシュします...

「UTF-8」で正常に接続でき、でクエリを実行できますsqlstr.encode('utf-8')。問題は、Unicode 以外のコンテンツを含む Unicode 文字列を返すことです。

たとえば、1 つのクエリが Unicode 文字列u'Port 26 \xb5\xe7'を返しますが、これは間違っています。これは Unicode 文字列ではなく、まったくデコード/エンコードできません。'Port 26 \xb5\xe7'(python 2.x の場合) である必要があるため、gbk でデコードできます。そして正しい結果を得る

私の仕事は、ユニコード文字列から生のコンテンツを抽出することです。まあ、文字列の切り捨てを使用して 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 に答える