python - Flask - 如何处理 URL 中的汉字
问题描述
我正在使用 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')
解决方案
代码似乎运行正常。我冒昧地对其进行了一些修改,并将其变成了一个工作示例。需要注意的重要一点是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)
推荐阅读
- javascript - value.format 在格式化日期时不是反应 js 中的函数
- javascript - 单击菜单项之一时的菜单下拉菜单
- python - 生成斐波那契数时使用装饰器应用记忆
- python - 仅将字典列表中的值转换为列表列表,而不使用 Python 更改顺序
- linux - 如何将一些文件(可能像 /home/eric/libtest0.1.so)添加到 Yocto rootfs lib 文件夹(/lib)?
- testing - 如何通过代码或手动读取/编辑 Parasoft SOATEST .tst 文件?
- android - 为什么 Android Play Protect 安全扫描会阻止通用 Ionic 应用程序安装?
- excel - 单列多列数据分离
- java - 如何在多个 stepDefPages 中为多个场景使用相同的 chromedriver 而无需重新启动驱动程序?
- c# - C# MongoDb SortBy 枚举