【问题标题】:Data encoding error数据编码错误
【发布时间】:2011-04-25 08:23:50
【问题描述】:

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

【问题讨论】:

    标签: encoding utf-8 psycopg2


    【解决方案1】:

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

    您的源文件是否可能在ISO-8859-1 中,其中0xf8 对应于ø

    编辑:

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

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

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

    【讨论】:

    • 如果您有欧元符号,则为 -15
    • @Stephan:是的,ISO-8859-15 也是一种可能性,任何 8 位编码或多或少都是如此。所有 ISO-8859 变体在 0xf8 处都有一个代码点。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我的表的数据类型包含字符变化(10000)和整数。而且我没有尝试将任何 .jpg 文件存储为文本。我收到此错误,因为我在文本中有很多特殊字符,例如:“|_|” ,但我想按原样存储它们。
    【解决方案3】:

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

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

    【讨论】:

    • 我应该使用哪种数据类型来保存这些类型的字符
    • 嗯,字节数组? bytes 是 str 的别名,因此可能不起作用。
    猜你喜欢
    • 2017-04-01
    • 2018-11-08
    • 2023-04-01
    • 2022-01-02
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多