python:csv.reader& unicode(和postgres)

时间:2011-02-28 22:57:27

标签: python postgresql

我有一个带有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]

解决了问题!

1 个答案:

答案 0 :(得分:1)

您知道CSV文件是用UTF-8编码的吗?如果是,你会看到类似的东西:

$ file foo.txt 
foo.txt: UTF-8 Unicode text

如果它没有说UTF-8,那么你可能需要用不同的编解码器解码它,例如ISO-8859-1。