LINUX.ORG.RU

Cygwin, unicode.


0

1

У меня есть условно текстовые файлы, в по-видимому юникод формате. (По сути — файлы раскладки для windows keyboard layout creator.)

При попытке просмотреть их из командной строки

$ cat russian.klc
▒▒K B D L a y o u t 0 1 " R u s s i a n ( C u s t o m ) "
и так далее.

$ less russian.klc
«russian.klc» may be a binary file. See it anyway?
y
<FF><FE>K^@B^@D^@ ^@L^@a^@y^@o^@u^@t^@0^@1^@ ^@«^@R^@u^@s^@s^@i^@a^@n
^@ ^@(^@C^@u^@s^@t^@o^@m^@)^@»^@^M^@
^@^M^@
и так далее. Тоже не совсем то, что ожидалось.

$ startx
xauth: creating new authority file /home/Master/.serverauth.2092

bash-3.2$ cat russian.klc | head -
��KBD Layout01 «Russian (Custom)»

COPYRIGHT "(c) 2010 Org"

COMPANY «Org»

LOCALEID «00000419»

VERSION 1.0

 — вот, то, что требовалось.
___________________

Как мне быть? Как сделать Bash правильно понимать юникод?

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

itakingiteasy ()

>в по-видимому юникод формате.

А по сути в utf16 ?

anon_666 ()

> Как сделать Bash правильно понимать юникод?
Насколько я понял, в иксах всё работает?
Это проблема не bash, а виндового «терминала». Используйте графические программы.

AITap ★★★★★ ()

>Как сделать Bash правильно понимать юникод?

Оно и так всё понимает.
Используйте cat 123.txt |iconv -f UTF-16.

anon_666 ()
Ответ на: комментарий от itakingiteasy

$ locale
LANG=C.UTF-8
LC_CTYPE=«C.UTF-8»
LC_NUMERIC=«C.UTF-8»
LC_TIME=«C.UTF-8»
LC_COLLATE=«C.UTF-8»
LC_MONETARY=«C.UTF-8»
LC_MESSAGES=«C.UTF-8»
LC_ALL=

Я правильно понял? Я начинающий пользователь, поэтому лучше давать более подробные объяснения.

Kindaro ()
Ответ на: комментарий от Kindaro

У тебя UTF-8. В файле UTF-16. Поэтому требуется перекодировка через iconv. То, что cat в иксовом терминале вывел что-то разумное - результат игнорирования нулевых байтов терминалом (в UTF-16 латинские буквы представлены как их ASCII-эквиваленты, за которыми следует нулевой байт). Less показывает эти нулевые байты как ^@.

AEP ★★★★★ ()
Ответ на: комментарий от AEP

Ok.

А что можно сделать, чтобы работать с UTF-16 различными sed'ами, awk'ами? Мой план был в том, чтобы раскладку клавиатурную переделать.

Kindaro ()
Ответ на: комментарий от Kindaro

То есть, я могу конвертировать iconv, как мне выше посоветовали. Но тогда с юникодными символами придётся попрощаться, а я не уверен, что их там не было.

Kindaro ()
Ответ на: комментарий от Kindaro

UTF16 -> UTF8 кодируется без потерь, афаик. Соответсвенно, ни с чем прощаться не придётся.

itakingiteasy ()
Ответ на: комментарий от anonymous

А мне лень вручную кнопочки перетыкивать. Кроме того, хочется же образовываться, прогрессировать. // Винфак — это где?

Kindaro ()
Ответ на: комментарий от anon_666

глобально задать utf16-локаль.

Инструкцию.

$ locale -a | grep -i 16

// ничего
$ locale -a | grep en_US
en_US
en_US.utf8

$ locale -a | grep ru
ru_RU
ru_RU.utf8
russian

-------------- если поставлю ту, что без приписки, это и будет UTF-16?

Kindaro ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.