使用 iconv 与//TRANSLIT//IGNORE
从 utf8 转换为 ascii 效果很好;它根据当前语言环境将不可转换的字符替换为正确的音译(在我的例子中为 de_DE):
> echo 'möp' | iconv -f 'UTF8' -t 'ASCII//TRANSLIT//IGNORE'
moep
然而,当刚刚使用//IGNORE
没有//TRANSLIT
,它会抛出一个错误:
> echo 'möp' | iconv -f 'UTF8' -t 'ASCII//IGNORE'
mp
iconv: illegal input sequence at position 5
我想知道为什么会发生这种情况。输入序列完全相同,不应该//IGNORE
简单地跳过无效字符?
使用 iconv C api 时,我收到 EILSEQ 错误 - 所以基本上我不知道输入字符串是否包含无效的 UTF8...
Linux 上 iconv(1) 的手册页内容如下:
-t to-encoding, --to-code=to-encoding
Use to-encoding for output characters.
If the string //IGNORE is appended to to-encoding, characters
that cannot be converted are discarded and an error is printed
after conversion.
它确实会跳过该字符,但也会在最后引发错误。
看来通过使用 //IGNORE 你确实无法区分输入中无效字符和不可转换字符的情况。换句话说,EILSEQ 和 EINVAL 情况的处理方式相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)