Python 将Unicode数据从mysql加载到Redshift失败,返回“0”;错误的UTF8十六进制序列“;

Python 将Unicode数据从mysql加载到Redshift失败,返回“0”;错误的UTF8十六进制序列“;,python,utf-8,amazon-redshift,Python,Utf 8,Amazon Redshift,我正在尝试使用Python创建一个从MySQL到Redshift的简单表复制器。我这样做的方式是在MySQL中查询表,并使用Python(2.7)将输出写入CSV,然后将它们发送到S3,并将它们复制到各自的目标表中 我遇到了Unicode字符的问题。具体来说,我得到以下错误: 字符串包含无效或不支持的UTF8代码点。错误的UTF8十六进制序列:e9 20 50(错误4) 我这里的问题是这是一个python问题,还是一个S3/Redshift问题。以下是我在python中所做的工作: import

我正在尝试使用Python创建一个从MySQL到Redshift的简单表复制器。我这样做的方式是在MySQL中查询表,并使用Python(2.7)将输出写入CSV,然后将它们发送到S3,并将它们复制到各自的目标表中

我遇到了Unicode字符的问题。具体来说,我得到以下错误:

字符串包含无效或不支持的UTF8代码点。错误的UTF8十六进制序列:e9 20 50(错误4)

我这里的问题是这是一个python问题,还是一个S3/Redshift问题。以下是我在python中所做的工作:

import unicodecsv as csv

csv_writer = csv.writer(dest, encoding='utf-8')
for index,line in enumerate(a):
    if index == len(a)/2:
        file_ext+=1
        if dest: dest.close()
        dest = open(config['data_dir'] + directory + '/' + table_name + '.txt.' + str(file_ext), 'wb')
        csv_writer = csv.writer(dest, encoding='utf-8')
    csv_writer.writerow(line)
据我所知,Python编写的东西是正确的。事实上,如果我在VI中打开CSV,我可以看到:
“Fjällräven帆布黑色Kanken 15\笔记本电脑包”“”
所以我觉得这是正确的(和额外的“都是源代码中的垃圾)。但是,如果我对csv运行文件,我会得到:
ASCII文本,带有很长的行,带有CRLF行终止符。
。在将文件移动到S3并运行副本后,我会出现上面的红移复制错误


因此,回到问题上来:我怀疑这与文件的编码方式有关,而不是其中的内容,但我无法通过搜索找到任何确定的信息。有没有人遇到过这一点,他们找到了解决方案?谢谢你的帮助很好,但是MySQL没有导出UTF-8字符。通过在我的连接字符串中添加以下两行来修复此问题:

'use_unicode' : True,
'charset':'utf8'

我猜想
line
是一个
str
数据对象,它包含(当然是非unicode的)使用非utf-8编码的编码文本,当您尝试将其写入
csv\u writer
时,它无法将utf-8中的数据解码为unicode,因为它不是utf-8。您应该找到
行的编码,并且应该使用它而不是“utf-8”作为编码参数。如果您在windows上,则它可能是其中之一“windows-12XX”的编码取决于您的区域设置。您拼错了Kånken(-: