У меня есть ms sql-сервер, и мне нужно получить доступ к его базе данных на компьютере ubuntu. поэтому я использую freetds/pyodbc для запроса данных.Не удается получить правильный результат при запросе с pyodbc
ОС: Ubuntu 14,04
pyodbc: pyodbc-3.0.10
Когда MS SQL Server имеет специальный символ (ß), я не могу получить правильный результат.
cnxn = pyodbc.connect(
'DRIVER=FreeTDS;'
'SERVER=10.1.1.1;'
'PORT=1433;'
'DATABASE=db;'
'UID=sa;'
'PWD=111;'
'CHARSET=UTF-8;'
'unicode_results=True'
'TDS_Version=8.0')
cursor.execute("select * from test")
for row in cursor.fetchall():
print row[0]
строки [0] будет содержать символ бета, но когда я использую "".join("{:02x}".format(ord(c)) for c in row[0])
.
я обнаружил, что строка использовать 0xdf
для ß, от http://lwp.interglacial.com/appf_01.htm, 0xdf
сырое кодирование, так как UTF8, она должна быть 0xC3,0x9F
.
Почему pyodbc не возвращают данные кодирования UTF8, и как я могу расшифровать его в Python 2.7, спасибо ~
У SQL Server может не быть свойство 'charset'. Попробуйте кодировать строку в Python: 'row.encode ('utf-8')'. И посмотрите на это [SO post] (http://stackoverflow.com/questions/947077/using-pyodbc-on-linux-to-insert-unicode-or-utf-8-chars-in-a-nvarchar-mssql -field). – Parfait