古城热线 发表于 2018-9-13 10:56:56

Oracle HTTP 乱码

  用plsql写webservice,或许会出现中文乱码的问题。
  原因:
  数据库编码是ZHS16GBK,HTTP报文编码:UTF-8。UTL_HTTP包的WRITE_TEXT过程会把字符转换成数据库编码。
  措施:
  数据使用raw代替varcahr2,用blob代替clob。
  (1)发送报文时:
VV_REQ_TEXT:=CONVERT(VV_REQ_TEXT,'UTF8','ZHS16GBK');  
VV_REQ_RAW:=UTL_RAW.CAST_TO_RAW(VV_REQ_TEXT);
  
--UTL_HTTP.WRITE_TEXT(HTTP_REQ, VV_REQ_TEXT); --改成WRITE_RAW
  
UTL_HTTP.WRITE_RAW(HTTP_REQ, VV_REQ_RAW);
  (2)读取时也一样,READ_TEXT改成READ_RAW,保存备份表时由clob类型改成blob类型
  用varchar2时,'||'操作符会默认再转一次编码,会丢字节,即:
  CONVERT(VV_REQ_TEXT,'UTF8','ZHS16GBK') || '' 会丢失字节,故应先拼串再转换。write_text也会自动根据数据库编码再编码一次,也会因此丢字节。


页: [1]
查看完整版本: Oracle HTTP 乱码