tr (ubuntu) 和 tr (mac) 之间的编码差异
echo – | tr ’ X
在我的 Mac 上:正确打印 –
在 Ubuntu 10.10 上:打印 XX。
为什么?
作为参考,第一个字符是 'EN DASH' (U+2013),第二个字符是 'RIGHT SINGLE QUOTATION MARK' (U+2019)
编辑:我现在使用 Perl 代替。我使用的魔法咒语是:
perl -CSD -p -Mutf8 -e 'tr/A-ZÁÉÍÓÚÀÈÌÒÙÄËÏÖÜÂÊÎÔÛÇa-zäëïöüáéíóúàèìòùâèìòùñçßœ/ /cs'
它的意思是:除了我能想到的所有字母之外,用空格替换任何字符,并挤压空格。
echo – | tr ’ X
On my mac: correctly prints –
On Ubuntu 10.10: prints XX�
Why?
For reference, the first character is 'EN DASH' (U+2013), the second is 'RIGHT SINGLE QUOTATION MARK' (U+2019)
EDIT: I now use Perl instead. The magic incantation that I use is:
perl -CSD -p -Mutf8 -e 'tr/A-ZÁÉÍÓÚÀÈÌÒÙÄËÏÖÜÂÊÎÔÛÇa-zäëïöüáéíóúàèìòùâèìòùñçßœ/ /cs'
It means: except for all letters I could think of, replace any character by a space, and squeeze the spaces.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
GNU coreutils
tr
存在多字节字符的问题 - 它认为它们是单字节字符的序列。考虑到这一点,您在 Linux 上看到的内容是“预期的”:
编辑:
对于一组 UTF-8 兼容实用程序,您可能需要查看 传家宝工具箱。它包含一个显然支持 UTF-8 的
tr
实现,尽管我还没有测试过它。GNU coreutils
tr
has issues with multi-byte characters - it considers them a sequence of single byte characters instead.Taking this into account, what you see on Linux is "expected":
EDIT:
For a set of UTF-8 compatible utilities, you might want to have a look at the Heirloom Toolchest. It contains a
tr
implementation that apparently has UTF-8 support, although I have not tested it.