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;
我正在尝试遍历 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;