Flask-如何处理URL中的汉字

时间:2019-05-03 03:15:28

标签: python flask character-encoding blueprint

我正在使用Flask构建REST API,但是当我使用中文字符传递查询参数时,我得到的是乱码而不是中文

from flask import Blueprint
from flask_restful import Resource, Api

class Keyword(Resource):
    def post(self, keyword):
        return {"keyword": "keyword"}

keyword_api = Blueprint('resourses.keyword', __name__)
api = Api(keyword_api)
api.add_resource(
    Keyword,
    '/keyword/<string:keyword>',
    endpoint='keyword'
)
POST http://localhost:5000/keyword/價錢

我希望输出{“ keyword”:“价钱”},但实际输出是{“ keyword”:“ è²´é \ u0081 \ u008e”}

更新: 现在,我将其添加到代码中,它会正确返回{“ keyword”:“价钱”}

keyword = keyword.encode('iso-8859-1').decode('utf8')

2 个答案:

答案 0 :(得分:1)

代码似乎正常运行。我可以自由地对其进行一些修改,并使其成为一个有效的示例。需要注意的重要一点是 b'{“ keyword”:“ \ u50f9 \ u9322”}'对象类型是用 b 前缀表示的字节。如果将此数据从json序列化为python本地字符串,则会发现它是有效的price编码。

from flask import Blueprint, Flask
from flask_restful import Resource, Api
from werkzeug.local import LocalProxy
from logging import DEBUG

app = Flask(__name__)
app.logger.setLevel(DEBUG)
logger = LocalProxy(lambda: app.logger)


class Keyword(Resource):
   def post(self, keyword):
      logger.info("Keyword: {}".format(type(keyword)))
      return {"keyword": keyword}

keyword_api = Blueprint('resourses.keyword', __name__)
api = Api(keyword_api)
api.add_resource(
    Keyword,
    '/keyword/<string:keyword>',
    endpoint='keyword'
)

app.register_blueprint(keyword_api)

答案 1 :(得分:0)

类型为'utf-8',但由'iSO-8859-1'解码,因此字符乱码。 BytesStr数据解码为'iso-8859-1'。当您使用'iso-8859-1'对其进行编码时,它再次变回了Bytes数据,然后通过utf-8对其进行了解码,输出正确。这是不同编码/解码类型之间的变化。如果找到相应的参数,则可以将解码类型设置为utf-8