Oracle
如何在 Oracle 中轉換 html 實體?
我正在嘗試解碼包含 html 實體的 html。
我試過了
dbms_xmlgen.convert
,utl_i18n.unescape_reference
但結果不太令人滿意。SET ESCAPE ON; SELECT 'dbms_xmlgen.convert' AS method, dbms_xmlgen.convert('\♥', 1) AS hearts, dbms_xmlgen.convert('\&', 1) AS amp_ent, dbms_xmlgen.convert('\&', 1) AS amp_dec, dbms_xmlgen.convert('\&', 1) AS amp_hex, dbms_xmlgen.convert('\激\光', 1) AS chinese_laser FROM dual UNION ALL SELECT 'utl_i18n.unescape_reference', utl_i18n.unescape_reference('\♥'), utl_i18n.unescape_reference('\&'), utl_i18n.unescape_reference('\&'), utl_i18n.unescape_reference('\&'), utl_i18n.unescape_reference('\激\光') FROM dual;
我得到的結果是:
METHOD HEARTS AMP_ENT AMP_DEC AMP_HEX CHINESE_LASER ---------------------------------------------------------------------------------------------- dbms_xmlgen.convert ♥ & & & 激光 utl_i18n.unescape_reference ¿ & & & ¿¿
我的實際問題涉及漢字,由Java程序處理以創建PDF報告。我無法輕鬆訪問 Java 程式碼,但我可以控製程序使用的查詢。
我用於測試的一個漢字例子是雷射,Google翻譯告訴我它的意思是“雷射”,我收到編碼為
激光
. 這些沒有正確解碼,如上面的範例所示。我意識到在第二行中,倒置的問號似乎表明實體已轉換,但無法正確顯示。但是,這個 Oracle 本身是這樣做的,還是客戶端(我在 SQL+ 和 Toad 中都試過)?當我插入
utl_i18n.unescape_reference
Java 程序使用的查詢時,它適用於±
(±) 之類的實體,但同樣不適用於漢字。如何正確解碼所有實體?
- 我應該使用其他功能嗎?(這些是在 Internet 上某處推薦的)。
- 我應該更改一些設置嗎?(相關設置如下圖)。
相關資訊
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production SQL*Plus: Release 10.1.0.5.0 NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CHARACTERSET WE8MSWIN1252 NLS_NCHAR_CHARACTERSET AL16UTF16
中文字元被正確解碼
utl_i18n.unescape_reference
。事實上,它們只是沒有正確顯示在您的查詢結果中,可能不支持這些特殊字元。您可以使用此SQL Fiddle確認這一點。
客戶端負責適當地顯示字元。如果客戶端不能顯示一個字元,它可能會顯示一個倒置的問號、其他東西或只是普通的垃圾。
所以到現在為止,真正的問題是你想在哪裡顯示這個字元串……