oracle – PL / SQL:UTL_HTTP POST与UTF8字符串导致字符损坏
发布时间:2021-01-13 04:08:26 所属栏目:站长百科 来源:网络整理
导读:我想通过utl_http将UTF8 json字符串发送到node.js处事器.发送字符串 ["Sant Julià de Lòria"] 确实到了 ["Sant Juli??? de L???ria"] PL / SQL代码如下: FUNCTION http_post_varchar( p_url VARCHAR2,p_request_body VARCHAR2 ) RETURN VARCHAR2AS req UT
|
我想通过utl_http将UTF8 json字符串发送到node.js处事器.发送字符串 ["Sant Julià de Lòria"] 确实到了 ["Sant Juli??? de L???ria"] PL / SQL代码如下: FUNCTION http_post_varchar(
p_url VARCHAR2,p_request_body VARCHAR2 )
RETURN VARCHAR2
AS
req UTL_HTTP.REQ;
resp UTL_HTTP.RESP;
value VARCHAR2(32767); -- URL to post to
v_url VARCHAR2(200) := p_url;
-- Post Parameters
v_param VARCHAR2(32767) := p_request_body;
v_param_length NUMBER := length(v_param);
BEGIN
req := UTL_HTTP.BEGIN_REQUEST (url=> v_url,method => 'POST');
UTL_HTTP.SET_HEADER (r => req,name => 'Content-Type',value => 'application/json;charset=UTF-8');
UTL_HTTP.SET_HEADER (r => req,name => 'Content-Length',value => v_param_length);
UTL_HTTP.WRITE_TEXT (r => req,data => v_param);
resp := UTL_HTTP.GET_RESPONSE(req);
LOOP
UTL_HTTP.READ_LINE(resp,value,TRUE);
END LOOP;
UTL_HTTP.END_RESPONSE(resp);
RETURN 'OK';
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY THEN
UTL_HTTP.END_RESPONSE(resp);
RETURN 'OK';
END http_post_varchar;
办理要领您应该将代码变动为:UTL_HTTP.SET_BODY_CHARSET('UTF-8');
UTL_HTTP.SET_HEADER (r => req,value => LENGTHB(v_param));
UTL_HTTP.WRITE_RAW (r => req,data => UTL_RAW.CAST_TO_RAW(v_param));
因为UTF-8,LENGTHB为字节长度.不然计较的长度将为false,而且您在方针端呈现错误(不测的输入竣事或其他内容). (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

