UTL_HTTP和法语口音

问题描述

我尝试使用软件包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,'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'))