oracle – PLSQL:UTL_HTTP POST与UTF8字符串导致字符损坏

oracle – PLSQL:UTL_HTTP POST与UTF8字符串导致字符损坏,第1张

概述我想通过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 我想通过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   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,并且您在目标端出现错误(意外的输入结束或其他内容).

总结

以上是内存溢出为你收集整理的oracle – PL / SQL:UTL_HTTP POST与UTF8字符串导致字符损坏全部内容,希望文章能够帮你解决oracle – PL / SQL:UTL_HTTP POST与UTF8字符串导致字符损坏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1161765.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存