我有一个带有unicode字符的CSV(西班牙语字符)。试图将其导入到utf8编码的postgres表中。以下代码:
reader = csv.reader(open(filename, 'r'), delimiter=',')
for row in reader:
values = [None if x == '' else x for x in row]
query = 'INSERT INTO %s.rosters VALUES(%s)' % (self.schema, ','.join(['%s'] * len(values)))
self.executequery(query, values)
收益率ERROR: invalid byte sequence for encoding "UTF8": 0xf1616461
。所以,将其改为:
reader = csv.reader(open(filename, 'r'), delimiter=',')
for row in reader:
values = [None if x == '' else unicode(x, 'utf-8') for x in row]
query = 'INSERT INTO %s.rosters VALUES(%s)' % (self.schema, ','.join(['%s'] * len(values)))
self.executequery(query, values)
收益率'utf8' codec can't decode bytes in position 21-24: invalid data
有什么方法可以解决这个问题吗?
update 该文件不是UTF-8;它是Windows-1252。将值列表的分配更改为:
values = [None if x == '' else unicode(x, 'cp1252') for x in row]
解决了问题!
答案 0 :(得分:1)
您知道CSV文件是用UTF-8编码的吗?如果是,你会看到类似的东西:
$ file foo.txt
foo.txt: UTF-8 Unicode text
如果它没有说UTF-8,那么你可能需要用不同的编解码器解码它,例如ISO-8859-1。