如何xml编码Oracle中的UTF8字符?

时间:2013-08-15 11:27:15

标签: xml xml-parsing oracle11g

我正在使用dbms_xmlgen来帮助生成我的XML文件。但是它没有编码我的chr(50093)值。 当我将输出保存到文件并使用IE9查看文件时,我从IE9

获得以下消息
An invalid character was found in text content. 
Error processing resource 'file:c/temp/XML_analysis/xml_aaa.xml'.

D

这是我的样本作品:

 set serveroutput on;
 declare 
 cursor error_item is
 with error_row as
 (select 'D' || chr(50093) || 'a' as lname from dual)
  select lname from error_row;

 line1 varchar2(100) :=  '<?xml version="1.0" encoding="UTF-8" ?>';
 line2 varchar2(100) := '<word>';
 line3 varchar2(100);
 line4 varchar2(100) := '</word>';

 begin

 open error_item;
 fetch error_item into line3;
 close error_item;
 line3 := dbms_xmlgen.convert(line3);
 dbms_output.put_line(line1);
 dbms_output.put_line(line2);
 dbms_output.put_line(line3);
 dbms_output.put_line(line4);

 end;

我已经咨询了这个Orafaq.com网站。

问题:

  1. 为什么不dbms_xmlgen.convert编码chr(50093)

  2. 我在哪里可以了解更多关于如何使用Oracle方法对UTF8字符集进行xml编码?

1 个答案:

答案 0 :(得分:0)

这是编码角色的一种方法。

  1. 参考网站,例如FileFormat.info
  2. 确定您的十进制编码值。在这种情况下,chr(50093),拉丁文小写字母I acute,其十进制编码值为237.
  3. 使用&#字符前置237,并附加;。在Oracle中,您可以使用replace('string with characters',chr(50093),'&#237;'
  4. 中的replace()执行此操作

    在这种情况下,请将您的line3转让声明替换为

    line3 := replace(line3,chr(50093),'&#237;');

    您应该能够在XML阅读器中阅读输出。