xml - 将 xmltype 列导出到其中包含变音符号的文件

标签 xml oracle plsql

我正在 PL/SQL 中构建导出以导出有关客户的数据。 xml 是在临时表中构建的,直到那时一切似乎都可以工作。

但是,当 xmltype 列写入文件时,我遇到了麻烦。

例如,当我有一个像“Böhomer”这样的名称,并将其导出到文件时,我看到发生了一些事情:

当我用文本板打开它时,一切看起来都很好,并且我看到了 ö 字母

当我使用 Oxygen 等 XML 编辑器打开它时,我看到了 Bhomer

当我用 Java 阅读它时,我看到了 B�hmer

我假设文件应该可以通过所有这三种方法正确读取,并怀疑我对文件的编码做了错误(尽管文件中存在正确的数据,因为我可以用文本板看到它,我想我当我发送这种 XML 时,会收到提示的客户)

问题是,我不知道如何正确处理,甚至不知道正确的编码是什么。文件的写入是由UTL_FILE完成的。

有趣的是,当我用文本板打开文件并保存它并显式选择 UTF-8 编码时,它对于氧气 XML 编辑器和 java 来说变得可读。我尝试使用 UTL_FILE.FOPEN_NCHAR 过程将我的 PL/SQL 代码保存为 UTF-8,但这只会给我带来类似 ORA-29298: 字符集不匹配的错误。

有什么想法可以解决这个问题吗?

我的数据库字符集是WE8MSWIN1252

正在使用的版本: Oracle Database 11g 企业版版本 11.2.0.2.0 - 64 位生产版 PL/SQL 版本 11.2.0.2.0 - 生产 核心11.2.0.2.0生产 适用于 64 位 Windows 的 TNS:版本 11.2.0.2.0 - 生产 NLSRTL 版本 11.2.0.2.0 - 生产

最佳答案

我想我可以回答我自己的问题。

我用以下代码重现了我的问题:

DECLARE
   outputxml   XMLTYPE;

   fileName    VARCHAR2 (100) := 'testfile.xml';
   dir         VARCHAR2 (100) := 'XML_OUTPUT_DIR';
   fHandler    UTL_FILE.FILE_TYPE;
   xmlclob     CLOB;
BEGIN
   --Create some XML
   SELECT   XMLELEMENT ("name", 'Böhmer') INTO outputxml FROM DUAL;

   --Transform it into a clob
   xmlclob := outputxml.getclobval ();

   --Open a file and write the clob and close it
   fHandler := UTL_FILE.FOPEN (dir, fileName, 'W');
   UTL_FILE.PUT (fHandler, xmlclob);
   UTL_FILE.FCLOSE (fHandler);
END;

通过将 FOPEN 和 PUT 函数(而不是像我之前所做的那样仅使用 FOPEN 函数)更改为 NCHAR 版本,我得到了一个可由 Oxygen XML 编辑器和 Java 读取的文件。

具有 NCHAR 函数的示例程序:

DECLARE
   outputxml   XMLTYPE;

   fileName    VARCHAR2 (100) := 'testfile.xml';
   dir         VARCHAR2 (100) := 'XML_OUTPUT_DIR';
   fHandler    UTL_FILE.FILE_TYPE;
   xmlclob     CLOB;
BEGIN
   --Create some XML
   SELECT   XMLELEMENT ("name", 'Böhmer') INTO outputxml FROM DUAL;

   --Transform it into a clob
   xmlclob := outputxml.getclobval ();

   --Open a file and write the clob and close it
   fHandler := UTL_FILE.FOPEN_NCHAR (dir, fileName, 'W');
   UTL_FILE.PUT_NCHAR (fHandler, xmlclob);
   UTL_FILE.FCLOSE (fHandler);
END;

关于xml - 将 xmltype 列导出到其中包含变音符号的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092813/

相关文章:

jquery解析xml并按元素值分组

c# - 当我 add/text() 时,为什么我的 XPath 会卡在第一个结果上?

c# - 从 EnterpriseLibrary 获取 LONG RAW 数据(字节)

oracle - Oracle APEX 的终端名称

xml - 如何在 Go 中解码包含脏 HTML 的 XML

javascript - XML 在 Firefox 和 IE 上评估 WrongDocumentError

database - oracle - 违反完整性约束 - 找到子记录

oracle - 找出SQL查询的历史记录

oracle - pls_integer 和 binary_integer 有什么区别?

oracle - 使用XMLTABLE和xquery从xml中提取数据