Flask服务器无法处理非ascii字符

时间:2018-01-31 12:21:26

标签: python flask flask-restful

我已经使用烧瓶进行了简单的应用。其主要目标是使用post和get方法实现CLD2(语言检测器)。它适用于英语,但适用于乌尔都语,阿拉伯语等任何其他语言。它给出了无效结果

以下是相应的脚本

# http://127.0.0.1:5000/cld2?text="Your input text string"
# OUTPUT ( It gives output as we done in CC)
#"585&URDU-99-1155"


from flask import Flask,abort,jsonify,request
from flask_restful import Resource, Api, reqparse
import cld2
from bs4 import BeautiflSoup
import sys
import urllib2, urllib
import re

reload(sys)
sys.setdefaultencoding('utf8')


app = Flask(__name__)
api = Api(app)


class HelloWorld(Resource):

    def cld2_states(self, txt):
        txt = txt.encode("utf8")

        isReliable, textBytesFound, details = cld2.detect(txt)
        outstr = str(textBytesFound)
        for item in details:  # Iterate 3 languages
            if item[0] != "Unknown":
                outstr += '&' + item[0] + '-' + str(item[2]) + '-' + str(int(item[3]))
        return outstr

    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument('text', type=str)
        parser.add_argument('url', type=str)

        _dict =  dict(parser.parse_args())
        if _dict["text"] is not None:
            value = _dict["text"]
            print type(value)
            return self.cld2_states(value)

        return None

    def post(self):
        data = request.get_json(force=True)
        # print data
        predict_request = [data['content']][1]
        out = self.cld2_states(predict_request)

        return jsonify(score=out)

api.add_resource(HelloWorld, '/cld2')
if __name__ == '__main__':
    app.run(debug=True, port=6161, host='0.0.0.0')

如果我通过get方法提供查询,它会给出正确的结果,但对于post方法中的相同查询,它只返回一个数字。但如果文字是英文的,那么帖子也会给出正确的结果。 我的客户端是一个简单的Java应用程序,然后迭代文件并逐个查找它们的语言。

1 个答案:

答案 0 :(得分:0)

问题可能在于这一行:

outstr = str(textBytesFound)

不要使用strbytes转换为str,而是使用str.decode(),如下所示:

outstr = textBytesFound.decode("utf-8")

(很明显,如果你的文字没有用UTF-8编码,你需要告诉Python使用正确的编码)