Unicode Encode Error Кодек «latin-1» не может закодировать символ «\ u2019»

0

Я пытаюсь создать CSV данных из RDB MySQL, чтобы переместить его на Amazon Redshift. Тем не менее, одно из полей содержит описания, и некоторые из этих описаний содержат символ "или правильный одиночный кавычек". раньше, когда я запускал код, это дало бы мне

UnicodeEncodeError: 'charmap' codec can't encode character '\x92' in position 62: character maps to <undefined>

Затем я попытался использовать REPLACE, чтобы попытаться избавиться от правильных одиночных кавычек.

db = pymysql.connect(host='host', port=3306, user="user", passwd="password", db="db", autocommit=True)
cur = db.cursor()
#cur.execute("call inv1_view_prod.'Email_agg'")

cur.execute("""select field_1, 
        field_2, 
        field_3, 
        field_4, 
        replace(field_4_desc,"","") field_4_desc, 
        field_5, 
        field_6, 
        field_7 
from table_name """) 


emails = cur.fetchall()
with open('O:\file\path\to\file_name.csv','w') as fileout:
        writer = csv.writer(fileout)
        writer.writerows(emails)   
time.sleep(1)

Однако это дало мне ошибку:

UnicodeEncodeError: 'latin-1' codec can't encode character '\u2019' in position 132: ordinal not in range(256)

И я заметил, что 132 является позицией правой одинарной кавычки в SQL-заявлении, поэтому я считаю, что сам код может иметь проблему с ним. Я попытался использовать обычный прямой апостроф вместо правой одиночной кавычки в операторе REPLACE, однако это не заменило символ и все еще вернулось с исходной ошибкой. Кто-нибудь знает, почему он не примет одиночную цитату и как ее исправить?

  • 0
    Почему вы цитируете cur.execute (""" . Это может просто прочитать cur.execute(" Другие двойные кавычки в строке cur.execute также недопустимы (они будут видеть их как конец строки).
  • 0
    Имеет ли таблица базы данных текст, кодирующий Latin-1, но каким-то образом содержит не-Latin-1 символ?
Теги:
csv
unicode

1 ответ

0

\u2019 - это Юникод для , UTF-8 hex E28099, который является "ПРАВОЙ ОДИНОЧНОЙ ЦЕНОЙ". Прямым латинским эквивалентом является hex 92. Некоторые продукты обработки текстов используют это вместо апострофа (').

Вы получаете сообщения об ошибках не потому, что не можете обрабатывать символ, а потому, что в конфигурации не указано, какая кодировка используется там.

"132" кажется несущественным: 132 84 E2809E „ &#x84;

Примечания к Python: http://mysql.rjweb.org/doc.php/charcoll#python
Примечания по другим вопросам кодировки: проблема с символами UTF-8; я не вижу того, что я хранил

Не зная схему или конфигурацию Python, я не могу быть более конкретным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню