Python dialogflow api v2版本中出现非英语语言(如俄语)错误
我有自己的带有静态IP的HTTP服务器。在这台服务器上,我正在运行我的flask应用程序,以从运行在v2API上的对话流实现中获取请求。当我将我的代理与英语一起使用时,它会在flask应用程序中正确解析,但当我使用俄语时,在flask端我会得到垃圾输出,其中包含序列 我试图在对话框中设置charset=Unicode,但它仍然不起作用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
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')