iconv - :带有 ASCII//IGNORE 但不带有 ASCII//TRANSLIT//IGNORE的EILSEQ

  显示原文与译文双语对照的内容

使用 //TRANSLIT//IGNORE 从:转换为ascii工作很好;它根据当前语言环境( 我的de_DE ) 将非可以转换字符替换为正确的字符。


> echo 'möp' | iconv -f 'UTF8' -t 'ASCII//TRANSLIT//IGNORE'


moep



但是,如果仅使用不带 //TRANSLIT//IGNORE,则会引发错误:


> echo 'möp' | iconv -f 'UTF8' -t 'ASCII//IGNORE'


mp


iconv: illegal input sequence at position 5



我想知道为什么。 输入序列是完全相同的,不应该简单地跳过无效字符? 当使用。时,我得到了一个EILSEQ错误- 所以基本上我不知道输入字符串是否包含无效。

时间:

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的情况是相同的。

...