MacOS wc (wordcount) считает неправильные слова с символом UTF-8 Å

При использовании wc в строке Ås (шведская заглавная буква Å) я получаю количество слов 2, когда я ожидал количество слов 1.

Подсчет слов Å, дает 1, что кажется правильным.

$ echo sÅ | wc
       1       1       4
$ echo Å | wc
       1       1       3

Подсчет слов Ås, sÅs дает 2, что кажется неправильным.

$ echo sÅs | wc
       1       2       5
$ echo Ås | wc
       1       2       4

Это может воспроизвести только буква Å, а не любая из åäöÄÖ.

$ echo "Ås" | wc
       1       2       4
$ echo "Äs" | wc
       1       1       4
$ echo "Ös" | wc
       1       1       4

Я использую настройки Locale по умолчанию из Mac OS при запуске терминала, это выглядит так:

$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

Я получаю те же результаты на MacOS Sierra и Lion.

Просто проверяю, как выглядит строка Ås.

$ echo "Ås" | hexdump
0000000 c3 85 73 0a                                    
0000004

Итак, это вопрос настроек локали, и Mac OS настраивает его неправильно - по крайней мере, в отношении команды wc?

Это ошибка в версии wc для Mac OS, связанная с символом UTF-8 Å?

Или при использовании (по умолчанию) wc -c символ 85 определяется как символ пробела, представляющий собой многоточие в таблице ASCII? (Однако wc -m дает ожидаемый ответ для количества слов)

Или я пропустил что-то очевидное здесь?


person Mikael Roos    schedule 31.01.2017    source источник
comment
У меня нет ответа, но я могу подтвердить идентичные результаты при интерактивном тестировании... и добавить, что когда я подключаюсь по SSH к удаленному серверу FreeBSD, мое копирование и вставка выглядит как echo "\303\205s" | wc... и сообщает только одно слово . (wc в OS X/macOS происходит от более старой версии FreeBSD wc.) ОДНАКО .. если я тестирую файл в OS X, я получаю другие результаты. Попробуйте: echo "Ås" > test.txt; wc -w test.txt. Я понятия не имею, почему это происходит. Ждем информативных ответов.   -  person ghoti    schedule 31.01.2017
comment
А, еще наткнулся на эту проблему со шведскими иероглифами. Одним из обходных путей является преобразование в latin1 перед подсчетом с помощью wc... echo -n "sÅÄÖs" | iconv -t latin1 -f utf8 | wc дает 0 1 5   -  person Thibault D.    schedule 10.04.2017


Ответы (1)


Верно ! Это вопрос настройки локали - UTF_8 - это схема кодирования переменной длины. Прямые символы latin1 (старые символы Ascii) кодируются 1 байтом, тогда как акцентированные шведские символы 2 байта (или больше?) проверяют, в частности, A с кольцом. Надеюсь, поможет

person Yan Lacos    schedule 30.03.2020