如何处理URL中的汉字

2024-06-26 19:59:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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'
)
^{pr2}$

我期望{“keyword”:“價錢”}的输出,但实际输出是{“keyword”:“è²´\u0081\u008e”}

更新: 现在我把这个添加到代码中,它正确地返回{“keyword”:“價錢”}

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

Tags: fromimportapirestapiflask参数字符keyword
2条回答

代码似乎运行正常。我冒昧地修改了一下,使之成为一个有效的例子。需要注意的是b'{“keyword”:“\u50f9\u9322”}'对象类型是由b前缀表示的字节。如果将此数据从json序列化为python本机字符串,您将发现它是有效的價錢编码的。在

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)

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

相关问题 更多 >