use*_*670 5 unicode bash freebsd utf-8 iconv
字符“E\xcc\x81”( E\\xcc\\x81) 和“\xc3\x89”( \\xc3\\x89) 具有不同的代码点。它们看起来相同,但在测试匹配时结果是否定的。
不过,Python 可以对它们进行标准化:unicodedata.normalize('NFC', 'E\xcc\x81'.decode('utf-8')) == unicodedata.normalize('NFC', '\xc3\x89'.decode('utf-8'))返回True. 它打印为 \xc3\x89。
问题:有没有办法在纯 bash*中规范化字符串?我已经研究过了iconv,但据我所知它可以转换为 ascii,但没有标准化。
*GNU bash,版本 3.2.57(1)-release (x86_64-apple-darwin14))
\n如果你有uconv可用,那可能会完成这项工作:
$ echo -en "E\xcc\x81" | uconv -x Any-NFC | hexdump -C
00000000 c3 89
$ echo -en "\xc3\x89" | uconv -x Any-NFC | hexdump -C
00000000 c3 89
Run Code Online (Sandbox Code Playgroud)
Any-NFD也可用于分解形式。
| 归档时间: |
|
| 查看次数: |
2801 次 |
| 最近记录: |