Django 添加带有 JSON 的项目,错误不正确的字符串值:'\xC4\x97dos'

Django adding items with JSON, error Incorrect string value: '\xC4\x97dos'

我正在尝试遍历 JSON 对象并将该信息保存到 Django 字段中,到目前为止取得了相当大的成功。但是,在处理来自国外的数据时,我遇到了忽略特殊字符的问题。

customers.views中代码块的简化版本如下:

customer_list = getcustomers() #pulls standard JSON object  
if customer_list:
    for mycustomer in customer_list:
        entry = Customer(pressid=mycustomer['id'], 
                email = mycustomer['email'],
                first_name = mycustomer['first_name']
                )

上面的代码工作得很好......直到你引入一个外国字符,说一个非 utf-8 字符集的名字。

一个示例错误是:

Warning at /customers/update/
Incorrect string value: '\xC4\x97dos' for column 'first_name' at row 1

我已经尝试将 .encode('utf-8') 添加到字符串的末尾,但我仍然遇到此错误,并且还没有找到避免它的方法。如果特定字段使用无效字符,我可以截断数据,但我无法列出所有可能的字符,因为接下来你知道新客户会使用我不知道存在的字母。

在此先感谢您的帮助!

我查看了 unicode python 文档,发现一行似乎可以解决问题 https://docs.python.org/2/howto/unicode.html

我添加了 .encode('ascii', 'ignore') 而不是 .encode(utf-8) 并且它现在正在处理所有值。

此方法会截断所有未知字符,这是我能想到的最好方法。

您的数据库配置不正确。

https://docs.djangoproject.com/en/1.7/ref/unicode/

例如table这样的:

CREATE TABLE IF NOT EXISTS `api_projekt` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nazwa` varchar(30) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `nazwa` (`nazwa`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

尝试添加非 ASCII 字符时会出现错误。您需要将编码从 latin1 更改为 utf-8。

它应该看起来:

CREATE TABLE IF NOT EXISTS `api_projekt` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nazwa` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `nazwa` (`nazwa`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8  AUTO_INCREMENT=11 ;

修复它:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;