我的问题是我在将数据从csv文件复制到数据库表时遇到了编码错误。
psycopg2.DataError:用于编码“UTF8”的无效字节序列:0xf8 提示:如果字节序列与服务器期望的编码不匹配,也会发生此错误,该编码由“client_encoding”控制。
我没有使用任何编码和解码命令。并且为了将数据从文件复制到表格,我使用以下代码。
cur.copy_from(myFile, myTable)
这些文件包含许多特殊字符和奇怪的数据。但我想存储所有这些数据。
EDIT
表格是:
create table myTable(id integer,name character varying(10000));
和csv文件的示例是:
"1";"This is |_|¨^~~ || ¨text wuth special charater like Bjш;; ø"
"2";"Test data -._.- (2010/10/11) "
答案 0 :(得分:1)
你写道你没有指定任何编码,似乎psycopg2默认为UTF-8。 0xf8
不是有效的单字节UTF-8代码点。
您的源文件可能位于ISO-8859-1 0xf8
对应ø
的位置吗?
编辑:
有几个地方可以解决这个问题,哪些是正确的取决于您的情况。
答案 1 :(得分:0)
数据库中列的数据类型是什么?它应该适合您想要投入的任何内容。
如果要存储字节数据,请使用二进制数据类型。 如果要存储文本数据,请使用字符数据类型。
您不能指望您的数据库可以将.jpg
文件存储为文本,只是因为不是文本。
答案 2 :(得分:0)
如果要按原样存储,则不能使用字符数据类型。或者至少不检查编码有效性的那个。听起来输入数据不是UTF8编码的。
您可以修复编码或切换到其他数据类型。 如果您有多个具有不同编码的输入文件,当您尝试比较所有编码中不存在的字符时,可能会遇到有趣的比较问题。