Django'ascii'编解码器不能编码字符u'\ uff1f'

时间:2016-10-10 14:44:17

标签: python django encoding

我还是django的初学者。

当我保存到数据库中时,我收到了此错误。

  

'ascii'编解码器无法对位置14中的字符u'\ uff1f'进行编码:序数   不在范围内(128)

我在这里看到过类似的问题,但我已经尝试了,但仍然不行。

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

我相信它会发生在这个数据['english']中。

我应该更改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)

1 个答案:

答案 0 :(得分:0)

可能是DB不接受Unicode值作为字符串字段。

要解决此问题,请尝试两种方法:

  1. 将DB配置更改为使用unicode编码。例如。 This post for mysql。

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