我有一个带有unicode字符(西班牙文和ntilde;字符)的CSV。试图将其导入到utf8编码的psotgres表中被证明是谋杀。下面的代码:python:csv.reader&unicode(和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
有什么办法解决呢?
更新该文件不是UTF-8;它是Windows-1252。将值列表的赋值更改为:
values = [None if x == '' else unicode(x, 'cp1252') for x in row]
解决了问题!
原始文件的编码是什么?你需要知道这个才能创建'unicode'对象。您正在尝试使用UTF-8进行解码,但这显然不正确。 – AdmiralNemo 2011-02-28 23:42:39