python:csv.reader&;unicode(和postgres)
我有一个带有unicode字符(西班牙语字符)的CSV。正在尝试将其导入utf8编码的postgres表中。以下代码:python:csv.reader&;unicode(和postgres),python,postgresql,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,
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)
产生错误:编码“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”编解码器无法解码位置21-24的字节:无效数据
有没有办法解决这个问题
更新文件不是UTF-8;那是Windows-1252。将“值”列表的赋值更改为:
values = [None if x == '' else unicode(x, 'cp1252') for x in row]
解决了这个问题 您知道CSV文件是用UTF-8编码的吗?如果是的话,你会看到这样的情况:
$ file foo.txt
foo.txt: UTF-8 Unicode text
如果它没有显示UTF-8,那么您可能必须使用不同的编解码器对其进行解码,例如ISO-8859-1。原始文件的编码是什么?要创建
unicode
对象,您需要了解这一点。您正在尝试使用UTF-8进行解码,但这显然是错误的。ARGH。它实际上是windows-1252,尽管文件命令显示ASCII。有没有办法通过iconv或其他方式正确打开该文件?