Различия в кодировании между tr (ubuntu) и tr (mac) - PullRequest
1 голос
/ 26 февраля 2011
echo – | tr ’ X

На моем Mac: правильно печатает -

В Ubuntu 10.10: печать XX

Почему?

Для справки: первым символом является «EN DASH» (U + 2013), вторым - «ПРАВИЛЬНАЯ ОДНОКВАЖНАЯ КАРТОЧКА» (U + 2019)

РЕДАКТИРОВАТЬ: теперь я использую Perl вместо. Волшебное заклинание, которое я использую:

perl -CSD -p -Mutf8 -e 'tr/A-ZÁÉÍÓÚÀÈÌÒÙÄËÏÖÜÂÊÎÔÛÇa-zäëïöüáéíóúàèìòùâèìòùñçßœ/ /cs'

Это означает: за исключением всех букв, которые я мог придумать, замените любой символ пробелом и сожмите пробелы.

1 Ответ

1 голос
/ 26 февраля 2011

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

EDIT:

Для набора утилит, совместимых с UTF-8, вы, возможно, захотите взглянуть на Heirloom Toolchest . Он содержит реализацию tr, которая, очевидно, имеет поддержку UTF-8, хотя я не проверял ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...