SQL Server 2005 にあるデータを要求するときに、Python コードでエンコードの問題に直面しています。
(PyMSSQL-2.0.0b1 をコンパイルできなかったため)私はこのコードを使用しており、いくつかの選択を行うことができますが、SQLCMDが私に出力しているものがわからないという問題に固執しています: (
(テーブルに含まれるヨーロッパ言語を使用する必要があったため、アクセントなどを含む他のエンコーディングに直面する必要がありました)
例えば :
- Ms SQLServer Management Studio からそれを読んだ (選択した) とき、国名は「Ceská republika」です (最初の a は鋭角であることに注意してください)
- コマンド ライン (Windows 7 の Powershell) から SQLCMD を使用する場合、それでも問題ありません。"Cesk'a with acute'" が表示されます。
Python をレシピの os.popen トリックで使用する場合、つまり、この接続文字列を使用します。
sqlcmd -U 管理者名 -P パスワード -S サーバー名 -d データベース名 /w 8192 -u
私はこの文字列を取得します: 'Cesk\xa0 republika'
\xa0 に注意してください。私はそれがどのエンコーディングであるかを知っており、この \xa0 から {a with acute} に渡す方法を知っています...
Python と Unicode からテストする場合、この '\xe1' が必要です
>>> unicode('Cesk\xa0 republika')
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
unicode('Cesk\xa0 republika')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 4: ordinal not in range(128)
>>> unicode_a_with_acute = u'\N{LATIN SMALL LETTER A WITH ACUTE}'
>>> unicode_a_with_acute
u'\xe1'
>>> print unicode_a_with_acute
á
>>> print unicode_a_with_acute.encode('cp1252')
á
>>> unicode_a_with_acute.encode('cp1252')
'\xe1'
>>> print 'Cesk\xa0 republika'.decode('cp1252')
Cesk republika
>>> print 'Cesk\xa0 republika'.decode('utf8')
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
print 'Cesk\xa0 republika'.decode('utf8')
File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa0 in position 4: invalid start byte
それで、SQLCMDが私に何を与えているのですか?Python 用の理解可能な utf8 があることを確認するために、それおよび/または os.popen などを強制するにはどうすればよいですか?
(注意してください、私は SQLCMD の os.popen cmd で終了する -u の有無の両方を試しましたが、これは SQLCMD にユニコードで応答するように要求することを表しますが、効果はありません。また、「選択」でフィードしようとしました" utf8 でエンコードされた python 文字列はこれ以上成功しません:
sqlstr = unicode('select * from table_pays where country_code="CZ"')
cu = c.cursor
lst = cu.execute(sqlstr)
rows = cu.fetchall()
for x in rows:
print x
( 'CZ ', 'Cesk\xa0 republika ')
)
別のポイント:「sqlcmd.exe」について、私がグーグルで調べたものから、役立つ可能性のあるこれらのパラメーターもあります:
[ -f < codepage > | i: < codepage > [ < , o: < codepage > ] ]
しかし、私は正しいものを指定できませんでした。可能な値が何であるかわかりません.BTWを使用する(または使用しない):
[ -u unicode output]
私も助けてくれません...