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/qq_36405748/article/details/99454682