2016-10-10 57 views
0

我仍然是django的初学者。Django'ascii'编解码器无法编码字符u' uff1f'

当我保存到数据库,我得到了这个错误。

“ASCII”编解码器不能在14位编码字符U“\ uff1f”:序号 不在范围内(128)

我在这里看到了类似的问题,虽然,但我曾尝试和它仍然不好。

UnicodeEncodeError: 'ascii' codec can't encode character u'\xef' in position 0: ordinal not in range(128)

我相信它在这个数据[ '英语']发生。

我应该改变views.py或序列化程序?

我的看法是

class DialogueView(APIView): 
    permission_classes = (IsAuthenticated,) 

    def post(self, request): 

     data = request.data 
     serializer = DialogueSerializer(data=request.data) 
     if not serializer.is_valid(): 
      return Response(serializer.errors, status= 
       status.HTTP_400_BAD_REQUEST) 
     else: 
      owner = request.user 
      t = Dialogue(owner=owner, english=data['english']) 
      t.save() 
      # request.data['id'] = t.pk # return id 
      return Response(status=status.HTTP_201_CREATED) 

我的串行是

class DialogueSerializer(serializers.ModelSerializer): 

    sound_url = serializers.SerializerMethodField() 

    class Meta: 
     model = Dialogue 
     fields = ('id','english','myanmar', 'sound_url') 

    def get_sound_url(self, dialogue): 
     if not dialogue.sound: 
      return None 

     request = self.context.get('request') 
     sound_url = dialogue.sound.url 
     return request.build_absolute_uri(sound_url) 
+0

哪个版本的python? –

+0

我正在使用python 2.7 –

+0

在序列化程序和视图文件的第一行是否有魔法注释'#coding:utf-8'? –

回答

0

这可能是数据库不接受Unicode值作为一个字符串字段。

为了解决这个问题,尝试两种方式:

  1. 更改DB配置为使用Unicode编码。例如。用于mysql的This post

  2. 在存储到数据库之前对该unicode值进行编码。尝试转换这样的值: val = data['English'] 并将val存储到您的模型中。

+0

谢谢。我将通读大约1.你能详细解释2吗?这是因为我已经阅读了一些链接进行编码,并不是很好。我不确定它是否发生在视图或序列化器中。 –

+0

您可以将模型的'save'函数中的编码转换为[本问题]中所述(http://stackoverflow.com/questions/4269605/django-override-save-for-model) – SolessChong

相关问题