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