Я пытаюсь создать 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, однако это не заменило символ и все еще вернулось с исходной ошибкой. Кто-нибудь знает, почему он не примет одиночную цитату и как ее исправить?
\u2019
- это Юникод для , UTF-8 hex
E28099
, который является "ПРАВОЙ ОДИНОЧНОЙ ЦЕНОЙ". Прямым латинским эквивалентом является hex 92
. Некоторые продукты обработки текстов используют это вместо апострофа ('
).
Вы получаете сообщения об ошибках не потому, что не можете обрабатывать символ, а потому, что в конфигурации не указано, какая кодировка используется там.
"132" кажется несущественным: 132 84 E2809E „ „
Примечания к Python: http://mysql.rjweb.org/doc.php/charcoll#python
Примечания по другим вопросам кодировки: проблема с символами UTF-8; я не вижу того, что я хранил
Не зная схему или конфигурацию Python, я не могу быть более конкретным.
cur.execute ("""
. Это может просто прочитатьcur.execute("
Другие двойные кавычки в строке cur.execute также недопустимы (они будут видеть их как конец строки).