python保存到db错误:'ascii'编解码器无法解码字节

时间:2011-06-30 17:29:01

标签: python mysql database

将xml代码的一部分写入数据库

时遇到问题
  

UnicodeDecodeError:'ascii'编解码器无法解码1679位的字节0xe4:序数不在范围内(128)

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可能希望在将其写入数据库之前使用'utf8'对您的unicode字符串进行编码。

data.encode('utf8')

答案 1 :(得分:1)

一些玻璃球猜测。

您已经读过一些字节(来自文件,网络等),并且正在尝试将其写入您的数据库。您使用的数据库列使用文本类型(如charvarchartext)声明,而不是二进制类型(binaryvarbinaryblob)。因此某人(或某事)必须将字节转换为字符。

为此,使用编码(它是编码解码的一对函数的组合,以及字符集哪些对编码有效,以及对解码有效的字节(或字节序列) - 这里我们使用 decode )。

我认为转换过程的默认编码是ascii(也称为US-ASCII或ISO-646),它只支持0到127之间的字节值,以及Unicode的前128个字符。 您的XML文件至少包含ASCII范围之外的一个字节。这意味着您应该执行以下操作之一:

  • 在传递到数据库之前将字节转换为字符
  • 将数据库列修复为二进制类型而不是文本类型(这意味着不需要转码)
  • 以某种方式指示转换过程使用哪种编码(您的抱怨字节0xe4在Latin-1(ISO-8859-1)编码中看起来像ü。)
  • 修复您的XML文件,使其仅包含ASCII字符(例如,使用&#0xe4;代替

由于您既没有提供代码也没有提供其他信息,我无法提供更详细的建议。