Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dialogflow api v2版本中出现非英语语言(如俄语)错误_Python_Python 3.x_Flask_Unicode_Dialogflow Es - Fatal编程技术网

Python dialogflow api v2版本中出现非英语语言(如俄语)错误

Python dialogflow api v2版本中出现非英语语言(如俄语)错误,python,python-3.x,flask,unicode,dialogflow-es,Python,Python 3.x,Flask,Unicode,Dialogflow Es,我有自己的带有静态IP的HTTP服务器。在这台服务器上,我正在运行我的flask应用程序,以从运行在v2API上的对话流实现中获取请求。当我将我的代理与英语一起使用时,它会在flask应用程序中正确解析,但当我使用俄语时,在flask端我会得到垃圾输出,其中包含序列 我试图在对话框中设置charset=Unicode,但它仍然不起作用 import json,os,sys,logging from flask import Flask, request from flask import js

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

我试图在对话框中设置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"
}
实际查询文本为:“зЯааааа-Йаааааааааа107
收到的查询文本为:“??-???5??”

我已解决我的问题。在实现dialogflow时,我将标题设置为“Content-Type:application/json”,因此产生了问题。删除此项后,我在flask point获得Unicode文本,现在它工作正常。谢谢,溢出团队。

是否将JSON\u设置为ASCII设置为错误帮助?app.config['JSON_AS_ASCII']=Falshey hoenie感谢您的重播。我尝试了你的建议,但还是得到了什么??????“зЛзаааааааааааа1072。确保当我使用英语时,它会给我正确的文本,但使用unicode。但是我对俄语等非英语语言的问题,所以请指导我,为什么我会得到?????代替俄语文本。关于编码?request.json['queryResult']['queryText'].encode('utf-8')