python: csv.reader 与 Unicode(及 Postgres)
我有一个CSV文件,其中包含一个Unicode字符(西班牙语的ñ字符)。我想把这个文件导入到一个使用UTF-8编码的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]
就解决了这个问题!
1 个回答
1
你知道CSV文件是用UTF-8编码的吗?如果是的话,你会看到像这样的内容:
$ file foo.txt
foo.txt: UTF-8 Unicode text
如果没有显示UTF-8,那你可能需要用其他编码方式来解码,比如ISO-8859-1。