我只是将二进制模式的文件读入缓冲区,在该缓冲区上执行一些替换,然后将缓冲的数据插入MySQL数据库。无论编码标准如何,都插入了每个字节。我使用python 2.7
,效果很好。
代码:
with open(binfile,'rb') as fd_bin:
bin_data = fd_bin.read()
bin_data = bin_data.replace('"','\\"')
db_cursor.execute("INSERT INTO table BIN_DATA values {}".format(bin_data))
当我使用python 3.4
版本时,需要对其进行解码,因此我使用了:
bin_data = fd_bin.read()
bin_data = bin_data.decode('utf-8') # error at this line
提到的第二行产生错误:
bindata = bindata.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 1:invalid
start byte
我使用了latin-1
和iso-8859-1
解码方案,但是它们在某些地方插入了一些额外的字节。当我从数据库中获取数据时,数据在这种情况下并不相同,但它适用于python 2.7版本。
无论编码方案如何,我如何插入数据或解码数据?我无法跳过或忽略这些字节。