LINUX.ORG.RU

Кодировка cat


0

0

Вообще, консоль у меня русифицирована... тоесть ls прекрасно распознает кириллицу... но вот, если прочесть текстовый документ созданный в винде(если в линуксе, все ок) и содержащий русские буквы, видны одни иероглифы.. (что в просто cat, что в vi(m))...

anonymous

Вопрос года, однозначно! В фортунки его! Автору зачет!

З.Ы. Измелчал ЛОР. Куда катится мир? :-)

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

мило.. но хотелось бы как нибудь кат приучить, если это возможно.. все таки более удобнее было бы "cat 1.txt" чем "iconv -f cp1251 -t koi8-r 1.txt"

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

пасиб.. пашет... как не странно..

а насчет iconv -f cp1251 -t koi8-r.. хмм... те документы что я создал в винде правильно читаются.. но теперь неправильно читаются те что создаю в линуксе...

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

у тебя системная кодировка в винде - cp1251 (она же windows-1251), а в линуксе - koi8-r, либо меняй системную локаль и кодировку в лине на cp1251, либо каждый раз юзай iconv, по-другому никак

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

Понимаешь, есть такая штука, как кодировка. Вкратце: при помощи одного байта (восьми бит) можно передать 256 разных значений. Первые 128 символов четко определенны в стандарте ASCII. Это всякие управляющие симыволы (типа перевода каретки), латиница, цифры и разные знаки.

Допустим символу с шестнадцатиричным кодом 20 соответствует пробел, символ "t" -- это уже шестнадцатиричное 74 и т. д.

То есть есть некоторый договор, называемый таблицой ASCII, по которому коду 74 соответствует именно "t", а не что-нибудь иное (не F, не m и не восклицательный знак).

А с русским алфавитом получился небольшой бардак: существует не одна, а несколько таких "таблиц", или, как их еще называют, кодировок. В разных операционках используются разные кодировки (в виндах -- cp1251, в ДОСе -- cp866, в юниксах -- koi8-r).

И если в cp1251 при помощи кода C6 закодированна буква "Ж", то в koi8-r C6 -- это уже буква "ф". А "Ж" в koi8-r имеет код F6.

И если в виндах создать файл содержащий слово "Вопрос" (в шестнадцатиричном виде это получится <c2><ee><ef><f0><ee><f1>) то в линуксе сделав `cat file` тебе выведется на экран слово "бНОПНЯ". (cat ничего не преобразовывает, а выводит как есть). Получилось это из за несовпадения кодировок.

Если же ты в линуксе что-нибудь какой-нибудь текст запишешь в файл, то открыв его в виндах тоже увидишь какую-нибудь фигню. Поэтому нужно либо в виндах использовать редактор, понимающий koi8-r (почти все "заменители блокнота" умеют работать с несколькими кодировками, и с koi8-r в том числе), либо в линуксе записывать текст в виндовой кодировке. Первый вариант (поставить в виндах нормальный редактор), ИМХО, более удобен.

Про то как читать виндовые тексты, тебе рассказали. Погляди в местном FAQ'е, там про это подробно рассказанно.

Еще одна проблема заключается в том, что в линуксе перевод на новую строку кодируется одним символом (0a), а в виндах и в ДОСе -- двумя (0d0a). Из за этого возникают разные проблемы... Есть две утилитки: todos и fromdos. По названию, думаю, понятно какая что делает. Использовать так: todos < unixfile.txt > dosfile.txt.

Можно так-же перевести линукс на uft-8 (или поставить дистрибутив с uft-8 из коробки), и в виндах файлы сохранять в uft-8, но это все довольно трудно...

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

>todos и fromdos

Или как в любых юниксах unix2dos и dos2unix.

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

Harliff, спасибо конечно за труд... очень подробно тут все расписал... но, к сожалению, ничего нового ты так и не сказал...

насчет локали это все ясно.. поменять и не будет проблем... но сейчас меня интересует другое, есть ли проги, которые определяют кодировку файла и читают его подобрав оную?...

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