如何在烧瓶restful api中响应unicode字符串?

时间:2014-05-27 23:05:45

标签: python utf-8 flask-restful

我正在使用flask.ext.rest构建一个api。我想要返回一些中文字符串。但是,每次收到"\u7231"时(这是一个长度为8的字符串)。我该怎么做才能收到

from flask import Flask
from flask.ext.restful import reqparse, abort, Api, Resource
class E2C(Resource): # English to Chinglish
    def get(self):
        chinese = u'爱'
        type(chinese) # unicode
        return chinese

3 个答案:

答案 0 :(得分:3)

get方法应该返回一个Response实例。请点击此处docs

代码应为:

from flask import Flask, make_response
from flask.ext.restful import reqparse, abort, Api, Resource
class E2C(Resource): # English to Chinglish
    def get(self):
        chinese = u'爱'
        type(chinese) # unicode
        return make_response(chinese)

答案 1 :(得分:1)

'\ u7231'确实是您寻找的角色,问题在于您使用任何设备呈现该角色。

因此,您的浏览器页面可能需要包含meta标记来呈现UTF-8

<head>
<meta charset="UTF-8">
</head>
另一方面,cURL,给你一个快速谷歌,听起来它默认收到unicode char ok所以这只是你用来存储/显示结果的问题......你需要防止终端或文件系统或程序,或任何你正在使用的,将unicode char转换回它的数字表示。因此,如果将其保存到文件,则需要确保该文件获得utf-8字符编码;如果将其渲染到屏幕,则需要确保您的屏幕能够并且期望它。

答案 2 :(得分:0)

make_response 实际上可以解决问题。

我的情况略有不同,因为我有一个字典对象,尚未编码为utf-8 。所以我修改@Xing Shi的解决方案,以防有其他人遇到类似的问题。

def get(self):
     return make_response(
              dumps({"similar": "爱“, "similar_norm": ”this-thing"},
                  ensure_ascii=False).decode('utf-8'))