tr (ubuntu) 和 tr (mac) 之间的编码差异

发布于 2024-10-19 06:44:34 字数 387 浏览 2 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾听心声的旋律 2024-10-26 06:44:34

GNU coreutils tr 存在多字节字符的问题 - 它认为它们是单字节字符的序列。

考虑到这一点,您在 Linux 上看到的内容是“预期的”:

$ echo – | od -t x1
0000000 e2 80 93 0a
0000004
$ echo ’ | od -t x1
0000000 e2 80 99 0a
0000004
$ echo – | tr ’ X | od -t x1
0000000 58 58 93 0a
0000004

编辑:

对于一组 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":

$ echo – | od -t x1
0000000 e2 80 93 0a
0000004
$ echo ’ | od -t x1
0000000 e2 80 99 0a
0000004
$ echo – | tr ’ X | od -t x1
0000000 58 58 93 0a
0000004

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文