【问题标题】:Django 'ascii' codec can't encode character u'\uff1f'Django 'ascii' 编解码器无法编码字符 u'\uff1f'
【发布时间】:2017-02-19 00:45:05
【问题描述】:

我还是 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)

【问题讨论】:

  • 哪个版本的python?
  • 我使用的是 python 2.7
  • 您在序列化程序和查看文件的第一行有魔术注释# coding: utf-8 吗?
  • 安姆号我没有。
  • 添加它。它可能会解决您的问题。

标签: python django encoding


【解决方案1】:

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

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

  1. 将数据库配置更改为使用 unicode 编码。例如。 This post 用于 mysql。

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

【讨论】:

  • 谢谢。我将阅读大约 1。您能否详细说明 2?这是因为我已经阅读了一些链接来进行编码,这不好。我不确定它是否也发生在视图或序列化程序中。
  • 您可以在模型的save 函数中转换编码,如this question 中所述
猜你喜欢
  • 2018-05-05
  • 2018-04-15
  • 1970-01-01
  • 2013-04-21
  • 2015-04-13
  • 2018-07-07
  • 2011-04-05
  • 2018-05-04
相关资源
最近更新 更多