PyODBC выводит неподходящий UTF-16

Я пытаюсь вытащить список имен таблиц из базы данных MySQL. Соответствующие части кода заключаются в следующем:

conn = pyodbc.connect('...') cursor = conn.cursor() for table in cursor.tables(): print table.table_name 

Для каждой таблицы он печатает кучу тарабарщиков (коробки и вопросительные знаки в бриллиантах). Используя repr(table.table_name) он печатает:

 u'\U00500041\U004c0050\U00430049\U00540041\U004f0049' 

для таблицы под названием «ПРИМЕНЕНИЕ».

Если вы обрабатываете каждый 32-битный символ как два 16-битных символа, вы получаете строку «PALPCITAOI». Переставляя пары символов (1 и 2, 3 и 4 и т. Д.), Он производит «APPLICATIO» (отсутствует «N»). Предположительно, он заменил N и нулевой символ, что привело к отсутствию N (предполагая строки, завершающие нуль).

Как я могу получить имена таблиц правильно?

Это работает под Python 2.4, PyODBC 2.1 и MySQL 5.0.22.

2 Solutions collect form web for “PyODBC выводит неподходящий UTF-16”

Добавление CHARSET = UTF8 в строку соединения, и теперь я запускаю приложение. Например:

изменение

cnxn = pyodbc.connect('DSN=localhost')

в

cnxn = pyodbc.connect('DSN=localhost;CHARSET=UTF8')

Спасибо, Томас за то, что указал мне в правильном направлении. Модернизация до более поздней версии PyODBC также может работать.

Это известная проблема, которая была зафиксирована в pyodbc 2.1.8:

https://code.google.com/p/pyodbc/issues/detail?id=78&can=1&q=UTF-16

К сожалению, для пользователей Ubuntu LTS версия, доступная для Precise Pangolin, – это 2.1.7, где эта проблема все еще проявляется. Если вы хотите придерживаться LTS, я передал pyopbc 3.0.6 – вы можете найти его здесь:

https://launchpad.net/~gazoakley/+archive/precise-backports

  • Кодек UCS-2 не может кодировать символы в позиции 1050-1050
  • UnicodeEncodeError при записи в файл
  • Python UTF-8 XML-синтаксический анализ (SUDS): удаление «недопустимого токена»
  • Разница Python между print obj и print obj .__ str __ ()
  • Пробелы исчезли из извлечений PDF и странная интерпретация слов
  • как декодировать символ un unicode в python?
  • Декодирование, если это не unicode
  • Как использовать символы Unicode с PIL?
  • Python - лучший язык программирования в мире.