如何在Flask Restful API中响应Unicode字符串?

4

我正在使用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

你所说的“receive”,是指在浏览器中呈现吗? - John Mee
@JohnMee,是的。我所说的“接收”,是指从浏览器和命令行(curl http:...)两种方式。无论哪种方式,我都只能得到长度为8的字符串,而不是长度为1的字符串。 - Xing Shi
你好,我正在做一个类似于你的小项目,现在这个问题怎么样了? - zx1986
3个回答

3
get 方法应该返回一个 Response 实例。请参阅这里的文档
代码应该如下所示:
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
"\u7231"确实是您要寻找的字符,问题在于您使用的设备呈现该字符的方式。因此,您的浏览器页面可能需要包含一个标签以呈现UTF-8。
<head>
<meta charset="UTF-8">
</head>

另一方面,根据您的快速谷歌搜索,cURL似乎默认可以接收Unicode字符,所以问题只是您用来存储/显示结果的工具...您需要防止终端、文件系统、程序或任何您使用的东西将Unicode字符转换回其数字表示形式。因此,如果您将其保存到文件中,则需要确保该文件获得了utf-8字符编码;如果您将其呈现到屏幕上,则需要确保您的屏幕能够并且期望它。

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'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接