uconv
的{{3}}说:
-x音译
对转码后的Unicode数据运行给定的音译,并使用音译数据作为转码到目标编码的输入。
它还包括以下两个例子:
echo '\u30ab' | uconv -x 'hex-any; any-name'
uconv -f utf-8 -t utf-8 -x '::nfkc; [:Cc:] >; ::katakana-hiragana;'
第一个示例指向定义man pages的-x
选项,但第二个示例指向"compound transform"。
ICU提供的许多示例("rule-based transliterator",1)不起作用,这加剧了这一点:
$ 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
答案 0 :(得分:1)
根据你传递的内容,它会做出不同的事情。
下面的摘录是来自uconv.cpp
的格式化代码。 translit
是-x
参数的值。
UnicodeString str(translit), pestr;
/* Create from rules or by ID as needed. */
parse.line = -1;
if (uprv_strchr(translit, ':') || uprv_strchr(translit, '>') ||
uprv_strchr(translit, '<') || uprv_strchr(translit, '>')) {
t = Transliterator::createFromRules(UNICODE_STRING_SIMPLE("Uconv"), str,
UTRANS_FORWARD, parse, err);
} else {
t = Transliterator::createInstance(UnicodeString(translit, -1, US_INV),
UTRANS_FORWARD, err);
}
createFromRules
根据输入创建的内容进一步不同:
返回从中构造的
Transliterator
对象 给定的规则字符串。这将是一个RuleBasedTransliterator, 如果规则字符串只包含规则,或者a CompoundTransliterator,如果它包含ID块,或者a NullTransliterator,如果它包含解析为的ID块 对于给定的方向是空的。