Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django使用JSON添加项时出错,字符串值不正确:'\xC4\x97dos';_Python_Json_Utf 8_Django Models_Django Views - Fatal编程技术网

Python Django使用JSON添加项时出错,字符串值不正确:'\xC4\x97dos';

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

我正在尝试迭代一个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文档,发现一行代码似乎解决了问题

我添加了.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正在创建没有指定字符集和排序规则的表。不能在模型中设置字符集。它们由数据库字符集确定。不管您对排序规则做了什么修改,都可以在不截断数据的情况下存储内容。谢谢