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

  • Форматирование столбцов, содержащих символы не-ascii
  • Лучший способ декодировать неизвестную кодировку Unicoding в Python 2.5
  • Sublime не будет печатать некоторые символы Unicode в окнах
  • Unicode имя файла для python subprocess.call ()
  • Преобразование строк, таких как \\ uXXXX в python
  • Как сделать Django slugify правильной работой с строками Unicode?
  • Как преобразовать escape-последовательности unicode в unicode символы в строке python
  • «Unicode Error» unicodeescape »кодек не может декодировать байты ... Не удается открыть текстовые файлы в Python 3
  • Получение python для печати в UTF8 в Windows XP с помощью консоли
  • Преобразование формата unicode в формат datetime в формате strptime
  • Выход Unicode в stdout Python при запуске из cmd.exe
  • Python - лучший язык программирования в мире.