我正在尝试从MySQL RDB创建数据CSV,以将其移至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 :(得分:0)
\u2019
是’
的Unicode,UTF-8十六进制E28099
,这是一个“正确的单引号”。直接latin1等效为十六进制92
。某些文字处理产品使用它代替撇号('
)。
您收到错误消息,不是因为您无法处理字符,而是因为配置无法声明在何处使用哪种编码。
“ 132”似乎无关紧要:132 84 E2809E „ „
关于Python的说明:http://mysql.rjweb.org/doc.php/charcoll#python
关于其他字符集问题的说明:Trouble with UTF-8 characters; what I see is not what I stored
在不了解架构或Python配置的情况下,我不能更加具体。