Oracle PL/SQL HTTP请求-响应编码问题



根据我之前的问题,我似乎无法将HTTP响应从ISO-8859-1转换为UTF-8

我正在使用APEX_WEB_SERVICE包来满足我的请求。(我知道这个包本身使用UTL_HTTP,所以它的用法应该类似(

我的工作:

apex_web_service.g_request_headers(1).name := 'Content-Type';
apex_web_service.g_request_headers(1).value := 'text/csv';
l_response := apex_web_service.make_rest_request(
p_url            => MY_URL || '/download_csv',
p_http_method    => 'GET'
);

l_response包含csv数据,但所有'é''è'都被'¿':替换

Type;Groupe Acc¿Code;EOTP autoris¿Familles EOTP autoris¿;Nom;Pr¿m;Adresse

而如果我直接访问链接,我的浏览器会下载正确编码的链接:

Type;Groupe Accès;Code;EOTP autorisés;Familles EOTP autorisées;Nom;Prénom;Adresse

我试图用转换响应

l_response := convert(l_response, 'AL16UTF16', 'WE8ISO8859P1');

但它绝对没有效果。

该网站https://www.stocknet.fr/并且处于CCD_ 9中。

我的Oracle NLS参数(我显然无法修改(:

+-------------------------+-----------------------------+
|        PARAMETER        |            VALUE            |
+-------------------------+-----------------------------+
| NLS_LANGUAGE            | ENGLISH                     |
| NLS_TERRITORY           | UNITED KINGDOM              |
| NLS_CURRENCY            | £                           |
| NLS_ISO_CURRENCY        | UNITED KINGDOM              |
| NLS_NUMERIC_CHARACTERS  | .,                          |
| NLS_CALENDAR            | GREGORIAN                   |
| NLS_DATE_FORMAT         | DD-MON-RR HH24:MI           |
| NLS_DATE_LANGUAGE       | ENGLISH                     |
| NLS_CHARACTERSET        | WE8MSWIN1252                |
| NLS_SORT                | BINARY                      |
| NLS_TIME_FORMAT         | HH24.MI.SSXFF               |
| NLS_TIMESTAMP_FORMAT    | DD-MON-RR HH24.MI.SSXFF     |
| NLS_TIME_TZ_FORMAT      | HH24.MI.SSXFF TZR           |
| NLS_TIMESTAMP_TZ_FORMAT | DD-MON-RR HH24.MI.SSXFF TZR |
| NLS_DUAL_CURRENCY       | €                           |
| NLS_NCHAR_CHARACTERSET  | AL16UTF16                   |
| NLS_COMP                | BINARY                      |
| NLS_LENGTH_SEMANTICS    | BYTE                        |
| NLS_NCHAR_CONV_EXCP     | FALSE                       |
+-------------------------+-----------------------------+

在这一点上,我不知道是否有任何方法可以从plsql处理这个网站的数据。如有任何帮助、提示或建议,我们将不胜感激。

为了让Oracle正确解析字符,我不得不使用UTL_HTTPDBMS_LOB

这解决了我的问题:

DECLARE
l_clob            CLOB;
l_http_request    utl_http.req;
l_http_response   utl_http.resp;
l_text            VARCHAR2(32767);
BEGIN
dbms_lob.createtemporary(l_clob, false);
l_http_request := utl_http.begin_request(my_url || '/download_csv');
l_http_response := utl_http.get_response(l_http_request);
BEGIN
LOOP
utl_http.read_text(l_http_response, l_text, 32766);
dbms_lob.writeappend(l_clob, length(l_text), l_text);
END LOOP;
EXCEPTION
WHEN utl_http.end_of_body THEN
utl_http.end_response(l_http_response);
END;
dbms_output.put_line(l_clob); /* => ENCODING IS FINALLY GOOD ! */
dbms_lob.freetemporary(l_blob);
EXCEPTION
WHEN OTHERS THEN
utl_http.end_response(l_http_response);
dbms_lob.freetemporary(l_blob);
RAISE;
END;
/

我希望这能帮助其他人。

相关内容

  • 没有找到相关文章

最新更新