tr "`echo -e '\xE2\x80\x99'`" "`echo -e '\x27'`" < a > b
给定一个名为UTF-8编码的文件a
,其中包含以下示例:
We’re not a different species
“All alone?” Jeth mentioned.
OS X使用BSDtr
并产生不错的结果:
We're not a different species
“All alone?” Jeth mentioned.
Ubuntu使用GNUtr
并产生以下讨厌的结果:
We'''re not a different species
''<9C>All alone?''<9D> Jeth mentioned.
如何在Ubuntu中完成此转换?
您可以尝试其他一些工具,例如sed
:
$ sed "s/’/'/g" <a
We're not a different species
“All alone?” Jeth mentioned.
或者,由于我们正在执行简单的翻译,因此请y
针对sed
以下命令使用命令:
$ sed "y/’/'/" <a
We're not a different species
“All alone?” Jeth mentioned.
GNUtr
不能正常工作是因为:
当前
tr
仅完全支持单字节字符。最终它将支持多字节字符;当它-C
启用时,该选项将使它补充字符集,而使-c
它对值集进行补充。仅当某些值不是字符时,这种区分才重要;只有当输入包含编码错误时,才可能在使用多字节编码的语言环境中实现。
并且’
是一个多字节字符:
$ echo -n \' | wc -c
1
$ echo -n ’ | wc -c
3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句