【发布时间】:2016-12-21 16:46:19
【问题描述】:
man pages 对 uconv 说:
-x音译
对转码后的 Unicode 数据运行给定的音译,并将转译后的数据作为输入用于转码到目标编码。
还包括以下两个例子:
echo '\u30ab' | uconv -x 'hex-any; any-name'
uconv -f utf-8 -t utf-8 -x '::nfkc; [:Cc:] >; ::katakana-hiragana;'
第一个示例指向定义"compound transform" 的-x 选项,但第二个示例指向它是"rule-based transliterator"。
ICU 提供的许多示例(1、2)都不起作用,这加剧了这种情况:
$ echo "Example" | uconv -f UTF8 -t UTF8 -x 'NFD; [:Nonspacing Mark:] Remove; NFC;'
Couldn't create transliteration "NFD; [:Nonspacing Mark:] Remove; NFC;": U_MISSING_OPERATOR, line 0, offset 0.
$ echo "Example" | uconv -f UTF8 -t UTF8 -x '[:Latin:]; NFKD; Lower; Latin-Katakana;'
Couldn't create transliteration "[:Latin:]; NFKD; Lower; Latin-Katakana;": U_MISSING_OPERATOR, line 0, offset 0.
$ echo "Example" | uconv -f UTF8 -t UTF8 -x '[aeiou] Upper'
ExAmplE
$ echo "Example" | uconv -f UTF8 -t UTF8 -x 'NFKD; Lower; Latin-Katakana;'
エクサンプレ
那么-x到底定义了什么?
情节变厚了!看起来uconv 阻塞了不在转换规则中的预定义字符类。
常规字符类:
$ echo "Example" | uconv -f UTF8 -t UTF8 -x '[a-zA-Z] Upper'
EXAMPLE
$ echo "Example" | uconv -f UTF8 -t UTF8 -x ':: [a-zA-Z] Upper;'
EXAMPLE
预定义的字符类:
$ echo "Example" | uconv -f UTF8 -t UTF8 -x '[:alpha:] Upper'
Couldn't create transliteration "[:alpha:] Upper": U_MISSING_OPERATOR, line 0, offset 0.
$ echo "Example" | uconv -f UTF8 -t UTF8 -x ':: [:alpha:] Upper;'
EXAMPLE
以防万一,这是我正在使用的uconv 的版本:
$ uconv --version
uconv v2.1 ICU 58.1
【问题讨论】: