Python Django使用JSON添加项时出错,字符串值不正确:'\xC4\x97dos';
我正在尝试迭代一个JSON对象,并将该信息保存到Django字段中,到目前为止已经取得了相当好的成功。然而,当处理来自国外的数据时,我遇到了忽略特殊字符的问题 customers.views中代码块的简化版本如下:Python Django使用JSON添加项时出错,字符串值不正确:'\xC4\x97dos';,python,json,utf-8,django-models,django-views,Python,Json,Utf 8,Django Models,Django Views,我正在尝试迭代一个JSON对象,并将该信息保存到Django字段中,到目前为止已经取得了相当好的成功。然而,当处理来自国外的数据时,我遇到了忽略特殊字符的问题 customers.views中代码块的简化版本如下: customer_list = getcustomers() #pulls standard JSON object if customer_list: for mycustomer in customer_list: entry = Customer(p
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文档,发现一行代码似乎解决了问题 我添加了.encode('ascii','ignore')而不是.encode(utf-8),现在它可以处理所有的值
此方法将截断所有未知字符,这是我能想到的最好方法。您的数据库配置不正确 例如,这样的表:
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;
你能让字符串直接显示在Django之外吗?你想更具体一点吗?假设数据库制作正确,Django会自动适当地创建它的表吗?或者您是否需要向Django模型添加更多内容以确保正确完成?Django syncdb正在创建没有指定字符集和排序规则的表。不能在模型中设置字符集。它们由数据库字符集确定。不管您对排序规则做了什么修改,都可以在不截断数据的情况下存储内容。谢谢