Python pysqlite插入unicode数据8位bytestring错误
我知道以前也有人问过类似的问题,但答案似乎无法说明我做错了什么 我正在尝试插入此行: (Pdb)打印行 [886',39',83474',0',0',0',0',1.00',D',20070813',R',C',B',SOCK 4PK','\xe9\x9e\x8b\xe5\xb0\xba\xe5\xaf\xb86-9.5/24-27.5CM',PR'] 在此表中: 创建表项(“whs”int、“dept”int、“item”int、“dsun”int、“oh”int、“ohrtv”int、“adjp”int、“adjn”int、“销售”文本、“统计”文本、“lsldt”int、“cat1”文本、“cat3”文本、“des1”文本、“sgn3”文本、“单位”文本) sgn3列似乎是问题的根源。它被定义为文本,要插入的数据是utf-8。为什么我会收到sqlite3错误 ProgrammingError:“除非使用可以解释8位bytestr…=str的文本工厂,否则不能使用8位ByTestRing。”。强烈建议您只需将应用程序切换到Unicode字符串。” 下面是执行插入的代码:Python pysqlite插入unicode数据8位bytestring错误,python,sqlite,unicode,Python,Sqlite,Unicode,我知道以前也有人问过类似的问题,但答案似乎无法说明我做错了什么 我正在尝试插入此行: (Pdb)打印行 [886',39',83474',0',0',0',0',1.00',D',20070813',R',C',B',SOCK 4PK','\xe9\x9e\x8b\xe5\xb0\xba\xe5\xaf\xb86-9.5/24-27.5CM',PR'] 在此表中: 创建表项(“whs”int、“dept”int、“item”int、“dsun”int、“oh”int、“ohrtv”int、“ad
query = 'insert into %s values(%s)' % (
self.tablename,
','.join(['?' for field in row])
)
self.con.execute(query, row)
下面是创建要插入的记录生成器的过程:
def encode_utf_8(self, csv_data, csv_encoding):
"""Decodes from 'csv_encoding' and encodes to utf-8.
Accepts any open csv file encoding using any scheme recognized by
python. Returns a generator.
"""
for line in csv_data:
try:
yield line.decode(csv_encoding).encode('utf-8')
except UnicodeDecodeError:
next
这是我见过的最有用的错误消息之一。照上面说的去做。馈送它
unicode
对象,而不是UTF-8编码的str
对象。换句话说,丢失.encode('utf-8')
,或者稍后再进行解码('utf-8')…什么是csvdata
如果在现有代码中出现UnicodeDecodeError:
(1) 你应该做一些比你打算用它做的更有用的事情(把它扫到地毯下)
(2) 您可能希望将next
更改为pass
评论回复
哈哈,这是一个非常有用的错误 信息 哈哈???我不是在开玩笑;它准确地告诉你该做什么 在这种情况下,csvdata是一个csv文件 在Python2.x中使用big5编码 您将什么称为“csv文件”: 如果我选择不编码到utf-8,我的 行是ascii码对吗 完全错误<代码>字节从文件中读取。解码('big5')生成一个
unicode
对象。你可能喜欢读书
所以我需要在保存到数据库之前显式地将它们更改为unicode
不,它们已经是unicode了。但是,根据csvdata是什么,您可能需要将其编码到utf8中,以通过csv机制将其解码。这是我见过的最有用的错误消息之一。照上面说的去做。馈送它
unicode
对象,而不是UTF-8编码的str
对象。换句话说,丢失.encode('utf-8')
,或者稍后再进行解码('utf-8')…什么是csvdata
如果在现有代码中出现UnicodeDecodeError:
(1) 你应该做一些比你打算用它做的更有用的事情(把它扫到地毯下)
(2) 您可能希望将next
更改为pass
评论回复
哈哈,这是一个非常有用的错误 信息 哈哈???我不是在开玩笑;它准确地告诉你该做什么 在这种情况下,csvdata是一个csv文件 在Python2.x中使用big5编码 您将什么称为“csv文件”: 如果我选择不编码到utf-8,我的 行是ascii码对吗 完全错误<代码>字节从文件中读取。解码('big5')生成一个
unicode
对象。你可能喜欢读书
所以我需要在保存到数据库之前显式地将它们更改为unicode
不,它们已经是unicode了。然而,根据csvdata是什么,您可能希望将其编码为utf8,以通过csv机制获得它们,然后在以后对其进行解码。haha,这是一个非常有用的错误消息csvdata是一个csv文件,在本例中使用python 2.x中的big5编码。如果我选择不编码为utf-8,我的行是ascii,对吗?所以在保存到数据库之前,我需要显式地将它们更改为unicode?哈哈,这是一个非常有用的错误消息csvdata是一个csv文件,在本例中使用python 2.x中的big5编码。如果我选择不编码为utf-8,我的行是ascii,对吗?所以我需要在保存到数据库之前显式地将它们更改为unicode?
(1) csvdata = open('my_big5_file', 'rb')
(2) csvdata = csv.reader(open('my_big5_file', 'rb'))
(3) other; please specify