django rest_framework中将json输出字符强制为utf-8编码

最近在和日本外包合作开发JIRA对接发布系统的版本单时,

遇到这个问题。

就是我们这边的输出浏览器显示为中文,而到了JIRA端就出现乱码。

查了文档,原来django rest_framework的默认json是没指定编码的,

需要随接收方的环境编码来显示。

于是,因为项目进度,我们对了强制编码操作。

查看rest framework的源代码:

class JSONRenderer(BaseRenderer):
    """
    Renderer which serializes to JSON.
    """

    media_type = ‘application/json‘
    format = ‘json‘
    encoder_class = encoders.JSONEncoder
    ensure_ascii = not api_settings.UNICODE_JSON
    compact = api_settings.COMPACT_JSON

    # We don‘t set a charset because JSON is a binary encoding,
    # that can be encoded as utf-8, utf-16 or utf-32.
    # See: http://www.ietf.org/rfc/rfc4627.txt
    # Also: http://lucumr.pocoo.org/2013/7/19/application-mimetypes-and-encodings/
    charset = None

  于是,我们重写了一个继承自JSONRenderer的Utf8JSONRenderer。然后,指定一个renderer_classes属性值即可。

from rest_framework.renderers import JSONRenderer

class Utf8JSONRenderer(JSONRenderer):
    charset = ‘utf-8‘

  

class DeployPoolViewSet(viewsets.ModelViewSet):
    """
    This viewset automatically provides `list`, `create`, `retrieve`,
    `update` and `destroy` actions.

    Additionally we also provide an extra `highlight` action.
    """
    serializer_class = DeployPoolSerializer
    authentication_classes = (TokenAuthentication,)
    renderer_classes = (Utf8JSONRenderer,)

  

时间: 08-30

django rest_framework中将json输出字符强制为utf-8编码的相关文章

Django rest_framework 实用技巧

前言: 最近工作中需要用到Django rest_framework框架做API, 边学边写,记录了一些实际工作中需要用到的功能,不是很全也不系统,以后需要什么功能可以在这查询. 后续还会更新其它的用法 1 #################################################################### 2 ########安装和简单使用 3 ###### 准备工作 4 pip install rest_framework # 安装 5 6 INSTALL

C语言中以十六进制输出字符型变量会出现'ffffff"的问题

最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下: C代码   char buf[10] = {0}; buf[0] = 0xbf; printf("%2x\n\n\n", buf[0]);            /*在终端将会显示成:ffffffbf*/ buf[1] = 0x7f; printf("%2x\n\n\n", bu

js中将 整数转成字符,,将unicode 编码后的字符还原出来的方法。

一.将整数转成字符: String.fromCharCode(17496>>8,17496&0xFF,19504>>8,19504&0xFF,12848>>8,12848&0xFF,13360>>8,13360&0xFF,17969>>8,17969&0xFF,12592>>8,12592&0xFF,12337>>8,12337&0xFF,14592>>8

输入字符,输出字符时加行号

问题描述: 可以标准输入一些字符,然后输出时,在每一行前面加上行号,每一行可以接受的字符没有限制. 代码实现: /*.c*/ #include <stdio.h> #include <stdlib.h> int main() { int ch = 0; int line = 0; int flag = 1;    //设定标志位,最后确定是否需要换行,打印行号 while((ch = getchar()) != EOF) { if(flag == 1) { flag = 0; li

IOS问题汇总:2015-1-8 SBJson解析时报错—json文件字符非法

SBJson解析时报错—json文件字符非法 Error Domain=org.brautaset.SBJsonParser.ErrorDomain Code=0 “Illegal start of token [ï]” UserInfo=0x7fd46ad98590 {NSLocalizedDescription=Illegal start of token [ï]} IOS应用在iPhone5和iPhone5s上不能全屏显示,应用画面上下各有1条黑色的解决方案——是因为LaunchScree

python例子-Django之传递json到js脚本中。

一.有两种方法传递sjon到页面中,一种是ajax使用,另一种是直接渲染在页面中: views.py #coding:utf-8 from django.shortcuts import render import json # Create your views here. def addjson(request): list_ = ['list集合','渲染Json到模板'] dict_ = {'site':'字典地址','author':'自学者'} return render(reque

Newtonsoft.Json输出Json时动态忽略属性

一,前言 最近做项目采用Json形式和其他客户端交互,借助于Newtonsoft.Json . 由于业务场景不同,输出的Json内容也不同.要想忽略的属性,可以借助Newtonsoft.Json的特性,在实体前面添加特性[JsonIgnore]即可,但有时候会根据业务需求,在不同的地方输出同一个实体中不同的属性,所以添加特性的方式显然不能满足要求.例如user表,在A场景下需要password:B场景下不需要. 二,解决办法 可以重写Newtonsoft.Json的DefaultContract

SpringMVC中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面

导包: 除了一些spring的包之外,还需要jackson-annotations.jar , jackson-core.jar , jackson-databind.jar 这三个包 开启@ResponseBody注解: 在 spring-mvc.xml 中通过<mvc:annotation-driven />开启@ResponseBody注解 使用@ResponseBody标注业务方法 package com.loger.controller; import java.util.Array

java中JTextPane使输出字符到指定的宽度换行,并将垂直滚动条的位置移动到输出的最后位置

SimpleAttributeSet set = new SimpleAttributeSet(); Document doc = tp.getStyledDocument(); FontMetrics fm = tp.getFontMetrics(tp.getFont());//得到JTextPane 的当前字体尺寸 int paneWidth = tp.getWidth();//面板的宽度 String text = new String(bt, 0, len); try { for(int