oracle utf8 varchar,Oracle:将varchar2字段中的xml实体转换为utf-8字符

我相信dbms_xmlgen的问题在于技术上只有五个XML实体.您的示例有一个数字HTML实体,与Unicode对应:

Oracle有一个功能UNISTR,在这里有用:

select unistr('sloven\010dina') from dual;

我在上面的示例中将269转换为其十六进制等效010d(在Unicode中为U 010D).但是,您可以传递十进制数并执行如下转换:

select unistr('sloven\' || replace(to_char(269, 'xxx'), ' ', '0') || 'ina') from dual;

编辑:PL / SQL解决方案:

这是我为你准备好的一个例子.这应该循环并替换您从表中选择的每一行的任何出现次数.

create table html_entities (

id NUMBER(3),

text_row VARCHAR2(100)

);

INSERT INTO html_entities

VALUES (1, 'Hallöle slovenčina Ċ ú');

INSERT INTO html_entities

VALUES (2, 'I like the letter Ċ');

INSERT INTO html_entities

VALUES (3, 'Nothing to change here.');

DECLARE

v_replace_str NVARCHAR2(1000);

v_fh UTL_FILE.FILE_TYPE;

BEGIN

--v_fh := utl_file.fopen_nchar(LOCATION IN VARCHAR2, FILENAME IN VARCHAR2, OPEN_MODE IN VARCHAR2, MAX_LINESIZE IN BINARY_INTEGER);

FOR v_rec IN (select id, text_row from html_entities) LOOP

v_replace_str := v_rec.text_row;

WHILE (REGEXP_INSTR(v_replace_str, '[0-9]+;') <> 0) LOOP

v_replace_str := REGEXP_REPLACE(

v_replace_str,

'([0-9]+);',

unistr('\' || replace(to_char(to_number(regexp_replace(v_replace_str, '.*?([0-9]+);.*$', '\1')), 'xxx'), ' ', '0')),

1,

1

);

END LOOP;

-- utl_file.put_line_nchar(v_fh, v_replace_str);

dbms_output.put_line(v_replace_str);

END LOOP;

--utl_file.fclose(v_fh);

END;

/

请注意,我已经调用了UTL_FILE函数来将NVARCHAR行(Oracle的扩展字符集)写入数据库服务器上的文件. dbms_output虽然非常适合调试,但似乎不支持扩展字符,但如果您使用UTL_FILE写入文件,这应该不是问题.这是DBMS_OUTPUT:

Hallöle slovencina C ú

I like the letter C

Nothing to change here.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值