根据这个post,我想为我的Android应用程序做一个休息api。但是当我想从django休息框架中给json时,它不支持utf8单词。 这是截图:
这是我的模特:
from __future__ import unicode_literals
from django.db import models
class News(models.Model):
title = models.CharField(max_length=255)
created = models.DateTimeField('auto_now_add = True')
active = models.BooleanField()
def __str__(self):
return self.title.encode('utf8')
这是我的观点:
from django.shortcuts import render
from rest_framework import viewsets
from rest_framework import permissions
from news.models import News
from news.serializers import NewsSerialzer
class NewsViewSet(viewsets.ModelViewSet):
queryset = News.objects.all()
serializer_class = NewsSerialzer
这是我的序列化器:
from news.models import News
from rest_framework import serializers
class NewsSerialzer(serializers.HyperlinkedModelSerializer):
class Meta:
model = News
fields = ('title' , 'active' , 'created')
我使用django rest framework 3.3.2
答案 0 :(得分:1)
问题在于self.title.encode('utf8')
。好像你正在使用python 2. encode()
函数将字符串转换为字节。这就是为什么标题变得怪异。由于您已从unicode_literals
导入__future__
,因此所有字符串都将是unicode。只需返回可解决问题的self.title
..有关详细信息https://docs.python.org/2/howto/unicode.html
答案 1 :(得分:1)
确保您为http标头分配正确的编码,以便浏览器识别数据编码。 下面的示例显示了如何使用Firefox中的Developer Tool识别它。 Chrome中存在相同的工具。如果您显然不会在标头中分配编码,那么浏览器将尝试访客或使用默认值来编码来自服务器的数据。
答案 2 :(得分:0)
无论如何,当我在chrome +33中看到json
时,响应没有显示utf8
字,但是当我在Firefox中看到响应时,每件事情都是好的,当我解析{{1 }} 一切都好 。