数据编码错误

时间:2011-04-25 08:23:50

标签: encoding utf-8 psycopg2

我的问题是我在将数据从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) "

3 个答案:

答案 0 :(得分:1)

你写道你没有指定任何编码,似乎psycopg2默认为UTF-80xf8不是有效的单字节UTF-8代码点。

您的源文件可能位于ISO-8859-1 0xf8对应ø的位置吗?

编辑:

有几个地方可以解决这个问题,哪些是正确的取决于您的情况。

  • 如果您反复必须导入ISO-8859-1文件,则可能需要使用encoding来使脚本保持一致。

  • 如果您只需要执行一次导入,为什么不简单地将文件转换为Python之外的预期格式,例如iconvrecode

    < / LI>

答案 1 :(得分:0)

数据库中列的数据类型是什么?它应该适合您想要投入的任何内容。

如果要存储字节数据,请使用二进制数据类型。 如果要存储文本数据,请使用字符数据类型。

您不能指望您的数据库可以将.jpg文件存储为文本,只是因为不是文本。

答案 2 :(得分:0)

如果要按原样存储,则不能使用字符数据类型。或者至少不检查编码有效性的那个。听起来输入数据不是UTF8编码的。

您可以修复编码或切换到其他数据类型。 如果您有多个具有不同编码的输入文件,当您尝试比较所有编码中不存在的字符时,可能会遇到有趣的比较问题。