UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ u2019' в позиции 47: порядковый номер не в диапазоне (128)

Я использую Python 2.7 и MySQLdb 1.2.3. Я попробовал все, что нашел на stackoverflow и других форумах, для обработки ошибок кодирования, которые бросает мой скрипт. Мой скрипт читает данные из всех таблиц в исходном БД MySQL, записывает их в объект python StringIO.StringIO , а затем загружает эти данные из объекта StringIO в базу данных Postgres (которая, по-видимому, находится в формате кодировки UTF-8. в Свойства – Определение базы данных в pgadmin) с помощью команды copy_from библиотеки psycopg2.

Я узнал, что в моей исходной базе данных MySQL есть несколько таблиц в кодировке latin1_swedish_ci, а другие – в формате кодирования utf_8 (найдено это из TABLE_COLLATION в information_schema.tables).

Я написал весь этот код в верхней части моего сценария Python, основываясь на моих исследованиях в Интернете.

 db_conn = MySQLdb.connect(host=host,user=user,passwd=passwd,db=db, charset="utf8", init_command='SET NAMES UTF8' ,use_unicode=True) db_conn.set_character_set('utf8') db_conn_cursor = db_conn.cursor() db_conn_cursor.execute('SET NAMES utf8;') db_conn_cursor.execute('SET CHARACTER SET utf8;') db_conn_cursor.execute('SET character_set_connection=utf8;') 

Я все еще получаю UnicodeEncodeError ниже с помощью этой строки: cell = str(cell).replace("\r", " ").replace("\n", " ").replace("\t", '').replace("\"", "") #Remove unwanted characters from column value ,

 UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 47: ordinal not in range(128) 

Я написал следующую строку кода для очистки ячеек в каждой таблице исходной базы данных MySQL при записи объекта StringIO.

 cell = str(cell).replace("\r", " ").replace("\n", " ").replace("\t", '').replace("\"", "") #Remove unwanted characters from column value 

Пожалуйста помоги.

One Solution collect form web for “UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ u2019' в позиции 47: порядковый номер не в диапазоне (128)”

str(cell) пытается преобразовать cell в ASCII. ASCII поддерживает только символы с ординалами менее 255. Что такое ячейка?

Если cell является строкой unicode, просто сделайте cell.encode("utf8") , и она вернет байтовую строку, закодированную как utf 8

… или действительно iirc. Если вы передадите mysql unicode, тогда база данных автоматически преобразует его в utf8 …

Вы также можете попробовать,

 cell = unicode(cell).replace("\r", " ").replace("\n", " ").replace("\t", '').replace("\"", "") 

или просто используйте стороннюю библиотеку. Есть хороший, который будет фиксировать текст для вас.

Python - лучший язык программирования в мире.