2009-09-10 60 views
2

我的數據庫(10gR2)是單字節(NLS_CHARACTERSET = WE8DEC)。從Unicode轉換爲單字節字符集

我有一個Unicode XML文件,我想解析。如果我將文件讀入CLOB並嘗試將其轉換爲XMLType,則當XML包含特殊字符(本例中爲挪威語字符,如「øæå」)時,Oracle會扼殺。

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 

有什麼辦法,我可以使用Unicode執行從NCLOB轉換爲單字節CLOB,仍然保持特殊字符不變? (我特別感興趣的是挪威三個字符「øæå」的正確轉換,其他特殊符號和字符在這種情況下並不重要。)

回答

1

可能重新編碼那些不適合的字符使用字符引用將其轉換爲一個字節這可以通過查找將unicode值放入引用中來完成。例如,A看起來像A

1

TO_CLOB應該正確地從國家字符集轉換爲數據庫字符集。如果可以映射所有字符,則不會有任何問題。

然後我懷疑你的問題發生在把文件讀入NCLOB部分。 的Unicode是一個相當模糊信息:

  • XML文件經常編碼在UTF-8字符集(具有或不具有Byte Order Mark)。
  • 默認情況下,Oracle上的國家字符集設置爲UTF-16(AL16UTF16)。

需要一個特定的轉換從一個到另一個。您應該首先確保包含您的XML文件的NCLOB具有正確的信息。

0

我不知道你的問題的確切答案,但這種技術可以幫助你開始。

以下是我用於從字符集轉換爲另一個字符集的查詢。

SELECT CONVERT(NAME, 'WE8ISO8859P1', 'WE8DEC') 
    FROM table 

嘗試用:

NE8ISO8859P10 ISO 8859-10北歐

NEE8ISO8859P4 ISO 8859-4北部和東歐

page列表中選擇Oracle 8i的NLS設置

相關問題