我的数据库(10gR2)是单字节的(NLS_CHARACTERSET = WE8DEC)。
我有一个我想要解析的Unicode XML文件。如果我将文件读入CLOB并尝试将其转换为XMLType,则当XML包含特殊字符(在本例中为挪威字符,例如“øæå”)时,Oracle会发出ch咽声。
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00216: invalid character 184 (0xB8)
如果我将文件读入NCLOB,然后使用TO_CLOB将其显式转换为CLOB,则XMLType构造函数会成功。但是,这种转换会产生“丑陋”的结果。例如,
bølle gjær
变为
bÿlle gjÿr
有什么方法可以执行从NCLOB到Unicode到单字节CLOB的转换,并且仍然保持特殊字符的完整性? (我对正确转换三个挪威字符“øæå”特别感兴趣,其他特殊符号和字符在这种情况下并不重要。)
答案 0 :(得分:1)
可以使用字符引用重新编码那些不适合一个字节的字符。这可以通过查找将其放入引用的unicode值来完成。例如,A
看起来像A
答案 1 :(得分:1)
TO_CLOB
应该正确地从国家字符集转换为数据库字符集。如果可以映射所有字符,则不会有任何问题。
然后我怀疑你的问题发生在将文件读入NCLOB 部分。 Unicode 是一个相当模糊的信息:
需要进行特定转换才能从一个转换到另一个。您应首先确保包含XML文件的NCLOB具有正确的信息。
答案 2 :(得分:0)
我不知道您问题的确切答案,但这项技术对您来说非常有用。
这是我用于从字符集转换为另一个字符集的查询。
SELECT CONVERT(NAME, 'WE8ISO8859P1', 'WE8DEC')
FROM table
尝试:
NE8ISO8859P10 ISO 8859-10北欧
NEE8ISO8859P4 ISO 8859-4北欧和东北欧
此page列出了Oracle 8i NLS设置