У меня есть база данных sql-сервера, размещенная на Azure. Я поместил строку в базу данных со смарт-кавычками («test»). Я могу подключиться к нему и запустить простой запрос:pymssql возвращает другую кодировку на Azure/Windows, чем на Mac
import pymssql
import json
conn = pymssql.connect(
server='coconut.database.windows.net',
user='[email protected]',
password='********',
database='coconut',
charset='UTF-8',
)
sql = """
SELECT * FROM messages WHERE id = '548a72cc-f584-7e21-2725-fe4dd594982f'
"""
cursor = conn.cursor()
cursor.execute(sql)
row = cursor.fetchone()
json.dumps(row[3])
Когда я запускаю этот запрос на моем Mac (MacOS 10.11.6, Python 3.4.4, pymssql 2.1.3) Я получаю обратно строку:
"\u201ctest\u201d"
Это правильно интерпретируется как умные кавычки и отображается правильно.
Когда я запускаю этот запрос на Azure развертывание веб (Python 3.4, Azure App службы) Я вернусь другой (и неправильно) кодирования для той же строки:
"\u0093test\u0094"
я определил кодировку как " UTF-8 'на соединение pymssql. Почему среда Windows/Azure возвращает другую кодировку?
(примечание: я поставил предварительно построенный двоичный файл pymssql-2.1.3-cp34-none-win32.whl в рулевой рубке моего проектного репо на Azure. Это то же самое, что и предварительно созданный двоичный pymssql pymssql -2.1.3-cp34-cp34m-win32.whl только на PyPI Мне пришлось переименовать 'cp34m' в 'none', чтобы убедить pip для его установки.)
Интересно. Я использую сопоставление по умолчанию SQL_Latin1_General_CP1_CI_AS. Когда я запускаю sys.stdin.encoding "на моем Mac я получаю« utf-8 », а на Azure я получаю« cp1252 ». Интересно, используется ли стандартная кодировка символов python для использования символов Unicode. Только я не могу понять, как это сделать« chcp 65001 "на Azure перед запуском Python ... – Wheat