Flask - 如何处理 URL 中的汉字
Flask - How to deal with Chinese character in 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"}
更新:
现在我把这个添加到代码中,它 returns {"keyword": "价钱"} 正确
keyword = keyword.encode('iso-8859-1').decode('utf8')
代码似乎运行正常。我冒昧地对其进行了一些修改,并将其变成了一个工作示例。需要注意的重要一点是 b'{"keyword": "\u50f9\u9322"}' 对象类型是由 b[=15= 表示的字节] 字首。如果将此数据从 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'
解码为 Str
。当你用'iso-8859-1'
编码的时候,它又变回了Bytes
的数据,然后用utf-8
解码,输出就对了。这是不同 encoding/decoding 类型之间的变化。找到对应的参数就可以设置解码类型为utf-8
我正在使用 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"}
更新: 现在我把这个添加到代码中,它 returns {"keyword": "价钱"} 正确
keyword = keyword.encode('iso-8859-1').decode('utf8')
代码似乎运行正常。我冒昧地对其进行了一些修改,并将其变成了一个工作示例。需要注意的重要一点是 b'{"keyword": "\u50f9\u9322"}' 对象类型是由 b[=15= 表示的字节] 字首。如果将此数据从 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'
解码为 Str
。当你用'iso-8859-1'
编码的时候,它又变回了Bytes
的数据,然后用utf-8
解码,输出就对了。这是不同 encoding/decoding 类型之间的变化。找到对应的参数就可以设置解码类型为utf-8