首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Oracle中转换html实体?

如何在Oracle中转换html实体?
EN

Database Administration用户
提问于 2014-11-18 14:45:33
回答 2查看 7.2K关注 0票数 2

我试图解码包含html实体的html。

我尝试过dbms_xmlgen.convertutl_i18n.unescape_reference,但是结果并不令人满意。

代码语言:javascript
复制
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;

我得到的结果是:

代码语言:javascript
复制
METHOD                        HEARTS      AMP_ENT     AMP_DEC     AMP_HEX     CHINESE_LASER
----------------------------------------------------------------------------------------------
dbms_xmlgen.convert           ♥    &           &     &    激光
utl_i18n.unescape_reference   ¿           &           &           &           ¿¿

我的实际问题涉及汉字,由Java程序处理,以创建PDF报告。我无法很容易地访问Java代码,但我确实可以控制程序使用的查询。

我用来测试的一个汉字实例是激光,谷歌翻译告诉我它的意思是‘激光’,我收到的编码为激光。正如上面的例子所示,它们没有被正确地解码。

我意识到,在第二行中,倒问号似乎表明实体已被转换,但不能正确显示。但是,这是Oracle自己做的,还是客户端(我在SQL+和蟾蜍中都尝试过)?当我将utl_i18n.unescape_reference插入到Java程序使用的查询中时,它适用于像± (±)这样的实体,但同样地,它不适用于汉字。

我怎么能让所有的实体都被正确地解码?

  • 我应该使用另一个函数吗?(这些都是在互联网上推荐的)。
  • 我应该改变一些设置吗?(有关设置见下文)。

相关信息

代码语言:javascript
复制
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
EN

回答 2

Database Administration用户

回答已采纳

发布于 2014-11-28 14:37:38

utl_i18n.unescape_reference对汉字进行正确解码。实际上,它们只是在查询结果中没有正确显示,这可能不支持这些特殊字符。

您可以通过这个SQL Fiddle来确认这一点。

适当地显示字符是客户端的职责。如果客户端不能显示一个字符,它可能会显示一个颠倒的问号,或者其他的东西,或者只是普通的垃圾。

所以现在真正的问题是你想在哪里显示这个字符串..。

票数 2
EN

Database Administration用户

发布于 2014-11-28 15:55:21

您提到您尝试过SQL*Plus和蟾蜍;您的客户端操作系统Windows是什么?Unix?请参阅NLS_操作系统_字符集环境变量,它是在客户端上设置为客户端理解和支持的值的环境变量。如果您在Unix上,则调用

代码语言:javascript
复制
locale

命令,查看将LANG或LC_ALL设置为什么;您可能需要设置

出口NLS_OS_CHARSET=UTF-8

或者类似的。

在Unix中,可以使用

代码语言:javascript
复制
locale -a
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/82944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档