【问题标题】:Transliteration on Unicode LATIN LETTERS "WITH STROKE"Unicode 拉丁字母“WITH STROKE”的音译
【发布时间】:2011-10-15 07:04:36
【问题描述】:

将规则 "NFD; [:Nonspacing Mark:] Remove; NFC" 输入到 ICU Transliterator demo 中,字符 Ø (\u00d8 == LATIN CAPITAL LETTER O WITH STROKE) 保持原样(即 STROKE 未被剥离)。

In the list of non-marking spaces(类别Mn),我找不到类似于COMBINING SHORT STROKE OVERLAY\u0335)或COMBINING LONG STROKE OVERLAY\u0336)的名称COMBINING DIAGONAL STROKE

但是,我确实找到了 COMBINING SHORT SOLIDUS OVERLAY (\u0337) 和 COMBINING LONG SOLIDUS OVERLAY (\u0338)。它们看起来很相似,但在我的浏览器中与oO 结合使用时会呈现更粗的线条。

Unicode data I accessed for \u00d8 不提供该字符的分解。

同时,ICU Collator Demo 将使用 Primary (Level = 1 = 基本字母)整理者。

这是否意味着演示中使用的 Collat​​or 的语言环境已设置为以 Unicode 规范未提及的方式识别基本字符?

如果是这样,如果我想在音译时从LATIN [CAPITAL, SMALL] LETTER * 字符中去除 STROKE,是否需要自定义基于规则的音译器?

【问题讨论】:

    标签: unicode icu transliteration


    【解决方案1】:

    是的。由于某种原因,Ø这封信没有分解,所以必须手动处理。

    【讨论】:

      【解决方案2】:

      请参阅以下内容。拉丁语 ASCII 直译器进入 ICU 4.6。正如您所指出的,整理演示使用 UCA / CLDR 剪裁,其中 O 与斜线 O 作为基本字母差异,这与是否存在分解不是同一个问题。 “w”也不会分解成“v + v”。分解与是否存在以两种不同方式表示字符的现有编码有关。

      【讨论】:

      • 使用 LATIN-ASCII 转换绝对比编写自己的 Translsiterator 规则更好!谢谢,史蒂文。
      【解决方案3】:

      此转换与 replaceAll 一起甚至可以用于删除 Ø 和其他字符。

      String id = "Accents-Any;NFD;[:Nonspacing Mark:] Remove; NFC";
      System.out.println(latin.replaceAll("[^\\w]",""));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-21
        • 1970-01-01
        • 2023-04-06
        • 2015-09-11
        • 1970-01-01
        • 2013-10-21
        • 2014-06-06
        • 1970-01-01
        相关资源
        最近更新 更多