【问题标题】:error with non english language like russian in dialogflow api v2 versiondialogflow api v2 版本中的非英语语言(如俄语)出错
【发布时间】:2019-04-11 13:56:52
【问题描述】:

我有自己的带有静态 IP 的 HTTP 服务器。在这台服务器上,我正在运行我的烧瓶应用程序以获取来自在 v2 API 上运行的对话流实现的请求。当我用英语使用我的代理时,它会在烧瓶应用程序中正确解析它,但是当我使用俄语时,在烧瓶端我得到包含 ???????? 序列的垃圾输出。

我尝试在对话框中设置 charset = Unicode,但还是不行。

import json,os,sys,logging
from flask import Flask, request 
from flask import jsonify
from configparser import ConfigParser
import objectpath

def setup_custom_logger(name):
    formatter = logging.Formatter(fmt='%(asctime)s %(levelname)-8s 

%(message)s',datefmt='%Y-%m-%d %H:%M:%S')
handler = logging.FileHandler('log.txt', mode='w')
handler.setFormatter(formatter)
screen_handler = logging.StreamHandler(stream=sys.stdout)
screen_handler.setFormatter(formatter)
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)
logger.addHandler(screen_handler)
return logger

logger = setup_custom_logger('myapp')
app = Flask(__name__) 

@app.route('/flightSearchByRoute', methods=['POST'])
def interactionPredictions():
    try:
        response = {
                "status": 0,
                "query": "ERROR"
            }
        if request.json['result']: #if key doesn't exist, returns None
            print("request",request)
            print("key output",request.json['queryResult']['queryText'])
            print("parsed",json.dumps(request.json,indent=4, sort_keys=True))
            toLocation = request.json['queryResult']['parameters']['to']
            fromLocation = request.json['queryResult']['parameters']['from']
            qTime = request.json['queryResult']['parameters']['time']
            outputContexts = request.json['session']#['outputContexts'][0]['name']
            print("parameters",fromLocation,toLocation,qTime,outputContexts)
            response = { "fulfillmentText": "Success API HIT to: "+toLocation+" from: "+fromLocation+ " time: "+qTime ,"fulfillmentMessages":[ { "text": { "text": [ "Success API HIT to: "+toLocation+" from: "+fromLocation+ " time: "+qTime,] } } ] ,"source":"" }
print(json.dumps(response,indent=4, sort_keys=True))
        return jsonify(response),200
    except Exception as e:
        exc_type, exc_obj, exc_tb = sys.exc_info()
        fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
        print(exc_type, fname, exc_tb.tb_lineno, e)
        response = {
                "status": 0,
                "query": "ERROR"
            }
        return jsonify(response),400


@app.errorhandler(404)
def page_not_found(e):
    response = {
            "status": 0,
            "query": "ERROR"
        }
    return jsonify(response),400

if __name__ == '__main__':
    app.run(host='0.0.0.0',debug=True, port=8888) #run app in debug mode on port 5344

response send from dialog flow:
{
  "id": "97feddb0-c24d-4a4e-bec5-5823a3374fb2",
  "timestamp": "2019-04-11T13:46:07.884Z",
  "lang": "ru",
  "result": {
    "source": "agent",
    "resolvedQuery": "из Лондона в Нью-Йорк 5 утра",
    "action": "",
    "actionIncomplete": false,
    "parameters": {
      "time": "05:00:00",
      "from": "Лондона",
      "to": "Нью-Йорк"
    }
response getting at flask end
{
    "originalDetectIntentRequest": {
        "payload": {}
    },
    "queryResult": {
        "allRequiredParamsPresent": true,
        "fulfillmentMessages": [
            {
                "text": {
                    "text": [
                        "okk"
                    ]
                }
            }
        ],
        "fulfillmentText": "okk",
        "intent": {
            "displayName": "bookFlight",
            "name": "projects/flightquery-82f02/agent/intents/c032518b-f882-4f7f-a49b-fcf57155eeaf"
        },
        "intentDetectionConfidence": 1.0,
        "languageCode": "ru",
        "parameters": {
            "from": "???????",
            "time": "2019-04-12T05:00:00+05:30",
            "to": "???-????"
        },
        "queryText": "?? ??????? ? ???-???? 5 ????"
    },
    "responseId": "ec09cc39-6c41-44f9-819a-dd7564ef4f92",
    "session": "projects/flightquery-82f02/agent/sessions/559a2540-07d1-fc35-4002-04d179f0b55f"
}

实际查询文本为:“из Лондона в Нью-Йорк 5 утра” 收到的queryText是:“?? ????????? ???-???? 5 ????”

【问题讨论】:

  • 将 JSON_AS_ASCII 设置为 False 有帮助吗? app.config['JSON_AS_ASCII'] = False
  • 嘿,谢谢你的重播。我已经尝试了你的建议,但仍然得到??????用俄语写成的“из Лондона”的状态。确保当我使用英语时,它会给我正确的文本,但使用 unicode。但我对非英语语言的问题,如俄语,所以请指导我为什么我会得到??????插入俄语文本。谢谢
  • 编码怎么样? request.json['queryResult']['queryText'].encode('utf-8')

标签: python python-3.x flask unicode dialogflow-es


【解决方案1】:

我已经解决了我的问题。我将标题设置为“Content-Type:application/json”以实现对话流,因此造成了问题。删除它后,我在烧瓶点得到了 Unicode 文本,现在它工作正常。谢谢,溢出团队。

【讨论】:

    猜你喜欢
    • 2015-09-06
    • 2021-07-16
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多