2015-12-20 110 views
1

根據這post,我想爲我的Android應用程序做一個休息api。但是當我從django rest框架給json的時候,它不支持utf8的話。 這是截圖:django rest框架不顯示utf8文字

enter image description here

這是我的模型:

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框架3.3.2

回答

0

無論如何,當我在Chrome +33看json,響應不表明utf8字,但是當我看到在Firefox的響應每一件事情是確定的,並當我解析Json每一件事情都是好的。

1

問題出在self.title.encode('utf8')。似乎你正在使用python 2. encode()函數將字符串轉換爲字節。這就是爲什麼標題越來越怪異。由於您已經從__future__導入unicode_literals,所有字符串都將是unicode。只是返回self.title,將解決這個問題。對於更多信息https://docs.python.org/2/howto/unicode.html

1

確保您將正確的編碼分配給http頭,以便瀏覽器識別數據的編碼。下面的示例顯示瞭如何使用Firefox中的Developer Tool識別它。 Chrome中存在相同的工具。如果你顯然不會在頭文件中分配編碼,那麼瀏覽器將嘗試訪客或使用默認值來編碼來自服務器的數據。

enter image description here