UTL_HTTP 和法国口音
UTL_HTTP and french accents
我尝试使用包 UTL_HTTP 调用 Web 服务,它可以工作,但我遇到了法语口音('é' 和 'è')的问题,UTF-8 不工作。
CONTENT := '{
"metier": {
"REF_CONTRAT": "'||ref_contrat||'",
"ID_HISTO": "'||id_histo||'",
"ID_OBJ_DECLENCHEUR": "'||ID_OBJ_DECLENCHEUR||'",
"TYPE_OBJ_DECLENCHEUR": "'||type_obj_declencheur||'",
"ID_SCENARIO_INSTANCIE": "'||ID_SCENARIO_INSTANCIE||'",
"ID_SCENARIO": "'||id_scenario||'",
"ID_SMS": "'||id_sms||'",
"REPONSE_RECUE": "'||reponse_recue||'",
"ACTION": "'||ACTION||'",
"TYPE_ACTION": "'||TYPE_ACTION||'"
}
}';
-- V_URL:=UTL_URL.ESCAPE(V_URL,FALSE,'UTF-8');
UTL_HTTP.SET_BODY_CHARSET('UTF-8');
REQ := UTL_HTTP.BEGIN_REQUEST(V_URL, V_METHODE,' HTTP/1.1');
UTL_HTTP.SET_HEADER(REQ, 'user-agent', 'mozilla/4.0');
-- UTL_HTTP.SET_HEADER(REQ, 'content-type', V_CONTENT_TYPE);
UTL_HTTP.SET_HEADER(REQ, 'content-type','application/json; charset="UTF-8"');
utl_http.set_header(req, 'Content-Length', lengthB(content));
UTL_HTTP.SET_HEADER(REQ,'Authorization',V_AUTHORIZATION);
UTL_HTTP.WRITE_TEXT(REQ, CONTENT);
/* UTL_HTTP.WRITE_RAW (R => REQ,
data => UTL_RAW.CAST_TO_RAW(CONTENT)); */
我收到错误 500 作为响应。
有什么想法吗?我尝试了所有我在互联网上找到的方法,但它不起作用
问题是当问题包含组合字符时,长度没有给出正确的长度; é 被计为 1 个字节而不是 2 个字节,因此当我将请求转换为 AL32UTF8 时它起作用了: length(Convert(CONTENT,'AL32UTF8'))
我尝试使用包 UTL_HTTP 调用 Web 服务,它可以工作,但我遇到了法语口音('é' 和 'è')的问题,UTF-8 不工作。
CONTENT := '{
"metier": {
"REF_CONTRAT": "'||ref_contrat||'",
"ID_HISTO": "'||id_histo||'",
"ID_OBJ_DECLENCHEUR": "'||ID_OBJ_DECLENCHEUR||'",
"TYPE_OBJ_DECLENCHEUR": "'||type_obj_declencheur||'",
"ID_SCENARIO_INSTANCIE": "'||ID_SCENARIO_INSTANCIE||'",
"ID_SCENARIO": "'||id_scenario||'",
"ID_SMS": "'||id_sms||'",
"REPONSE_RECUE": "'||reponse_recue||'",
"ACTION": "'||ACTION||'",
"TYPE_ACTION": "'||TYPE_ACTION||'"
}
}';
-- V_URL:=UTL_URL.ESCAPE(V_URL,FALSE,'UTF-8');
UTL_HTTP.SET_BODY_CHARSET('UTF-8');
REQ := UTL_HTTP.BEGIN_REQUEST(V_URL, V_METHODE,' HTTP/1.1');
UTL_HTTP.SET_HEADER(REQ, 'user-agent', 'mozilla/4.0');
-- UTL_HTTP.SET_HEADER(REQ, 'content-type', V_CONTENT_TYPE);
UTL_HTTP.SET_HEADER(REQ, 'content-type','application/json; charset="UTF-8"');
utl_http.set_header(req, 'Content-Length', lengthB(content));
UTL_HTTP.SET_HEADER(REQ,'Authorization',V_AUTHORIZATION);
UTL_HTTP.WRITE_TEXT(REQ, CONTENT);
/* UTL_HTTP.WRITE_RAW (R => REQ,
data => UTL_RAW.CAST_TO_RAW(CONTENT)); */
我收到错误 500 作为响应。 有什么想法吗?我尝试了所有我在互联网上找到的方法,但它不起作用
问题是当问题包含组合字符时,长度没有给出正确的长度; é 被计为 1 个字节而不是 2 个字节,因此当我将请求转换为 AL32UTF8 时它起作用了: length(Convert(CONTENT,'AL32UTF8'))