Python 将Unicode数据从mysql加载到Redshift失败,返回“0”;错误的UTF8十六进制序列“;
我正在尝试使用Python创建一个从MySQL到Redshift的简单表复制器。我这样做的方式是在MySQL中查询表,并使用Python(2.7)将输出写入CSV,然后将它们发送到S3,并将它们复制到各自的目标表中 我遇到了Unicode字符的问题。具体来说,我得到以下错误: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
字符串包含无效或不支持的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(-: