ORACLE 使用utl_url.escape把中文转换字符编码

非 Y 不嫁゛ 提交于 2019-11-27 05:47:21

oracle数据库环境的字符集是GBK的,也就是每个中文占用2个字节的长度,可以通过utl_url把相应的字符进行编码解码。

// utl_url.escape定义
FUNCTION escape(url  IN VARCHAR2 CHARACTER SET ANY_CS,
               escape_reserved_chars IN BOOLEAN  DEFAULT FALSE,
               url_charset IN VARCHAR2 DEFAULT utl_http.get_body_charset)

RETURN VARCHAR2 CHARACTER SET url%CHARSET;

今天写的包里需要把查出来的中文描述拼到url里,直接拼上去会报地址错误.
然后用utl_url.escape转换称UTF-8后完美解决问题

begin
    
      select nvl(a.content_number, '合同签署')
        into v_content_name
        from con_contract_content a
       where a.content_id = p_content_id;
    exception
      when no_data_found then
        null;
    end;
  
    v_url := g_get_flow_url || '?access_token=' || v_token ||
             '&contract_id=' || p_contract_id || '&content_type=' ||
             p_content_type || '&content_id=' || p_content_id ||
             '&businessscene=' ||
             utl_url.escape(v_content_name, true, 'UTF8');

附上对字符串进行URLDecode的utl_url.unescape定义:

// utl_url.unescape定义
  FUNCTION unescape(url IN VARCHAR2 CHARACTER SET ANY_CS,
        url_charset IN VARCHAR2 DEFAULT utl_http.get_body_charset)
  RETURN VARCHAR2 CHARACTER SET url%CHARSET;
//utl_url.unescape例子
begin
dbms_output.put_line( utl_url.unescape('http%3A%2F%2Fwww.baidu.com%2F%E5%8F%82%E6%95%B0%2F%3D%2B%2F','UTF8'));
end;

参考博文:https://blog.csdn.net/rznice/article/details/72530792

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!