使用COMPOSE和UNISTR 创建沉音字符

ZDNet软件频道 时间:2004-10-19 作者:Builder.com |  我要评论()
本文关键词:oracletips sqltips ScottStephens
很多语言,包括英语在内,都使用沉音字符(accented character)。因为这些字符不属于 ASCII 字符集,所以如果不查看 Unicode 值也不使用 Unicode 编辑器并将其转成一个已知字符集,就很难编写使用这些字符的代码。
本文译自Builder.com,未经许可请勿转载

很多语言,包括英语在内,都使用沉音字符(accented character)。因为这些字符不属于 ASCII 字符集,所以如果不查看 Unicode 值也不使用 Unicode 编辑器并将其转成一个已知字符集,就很难编写使用这些字符的代码。

Oracle9i引入了 COMPOSE 函数,该函数接受一串 Unicode 字符并规则化其文本。这就意味着它可以接受一个字母和一个组合标记,比如说‘a’(Unicode 字符0097)和沉音符(Unicode 字符0300),然后创建一个单独的由两个标记组合而成的字符。COMPOSE 使用特殊的组合标记,而没有使用 ASCII 中相应的音节标记,它所使用的特殊的组合标记是Unicode 标准的一部分。上面的例子的结果应该是 Unicode 字符00E0(有一个沉音符的小写拉丁字母‘a’)。

在 ANSI 中最常见的组合字符有:

·         U+0300:沉音符(grave accent)( ` )

·         U+0301:重音符(acute accent)( ' )

·         U+0302:抑扬音符号(circumflex accent)(^)

·         U+0303:颚化符号(tilde)(~)

·         U+0308:元音变音

如果没有特殊的软件或者键盘驱动程序的话,很难在键盘上输入 Unicode 字符0097和0300。因此,以纯 ASCII 文本输入 Unicode 序列的一个方法是使用 UNISTR 函数。这个函数接受一个 ASCII 字符串然后以国家字符集(通常作为16位 Unicode 或者 UTF-8 字符集安装)创建一个 Unicode 字符的序列。它使用十六进制占位符序列映射任何非 ASCII 字符,映射方式与 Java 类似。

要输入 a 后接一个沉音符组合字符的序列,可以使用 UNISTR(‘a300’),而不要试图直接在代码中输入字符。这个函数在任何字符集以及任何具有基于 Unicode 的国家字符集的数据库下都可以正常运行。可以将多个组合字符放在函数中——可以在 UNISTR 函数中混合使用 ASCII 和 Unicode 占位符。例如,可以像下面这样使用 UNISTR 函数:

select COMPOSE(UNISTR('Unless you are nai308ve, meet me at the cafe301 with
your re301sume301.')) from dual;

在将 UNISTR 函数的输出与 COMPOSE 组合时,可以在不查找任何值的情况下生成一个 Unicode 字符。例如:

select 'it is true' if compose(unistr('a300')) = unistr('0e0');


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134