Unicode Encode Error Кодек «latin-1» не может закодировать символ «\ u2019» - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь создать CSV данных из MySQL RDB, чтобы перенести их в 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, однако это не заменило символ и все равно вернулось с исходной ошибкой. Кто-нибудь знает, почему он не примет одинарную кавычку и как ее исправить?

1 Ответ

0 голосов
/ 04 июля 2018

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

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

"132" не имеет значения: 132 84 E2809E „ &#x84;

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...