Как надёжно определить текущую кодировку консоли

Автор: Napilnik Дата: 10.01.2010 04:41 Переменная LANG не подходит, что-то получше надо.
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 10:45daydrim Вопрос не понятен ) Что значит "получше, надёжно" и почему LANG не подходит?
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 10:58BigAndy Супернадежно
echo $LANG
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 12:18kosmonavt Napilnik Пишет:
-------------------------------------------------------
> Переменная LANG не подходит, что-то получше надо.

Почему?
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 16:11Napilnik >Почему?

Потому что показывает не текущую а системную кодировку, а это совсем не одно и тоже. В системе по умолчанию стоит утф8, но часто приходится переключаться на другие, а LANG всё равно показывает что используется ру_утф8. Программа которая мне очень нужна, использует такой способ определения текущей кодировки, из-за чего русский язык в ней глючит - используется IBM866 (нужна 8 битная кодировка) а определяется UTF8, соответственно вводимый текст неправильно отображается на экране. Если непонятно, описание можно пропустить, суть: нужно знать реально используемую на данный момент кодировку а не ту что была включена в консоли когда-то давно.
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 16:21BigAndy
Цитата:
Потому что показывает не текущую а системную кодировку

С хрена ли???
[root@home /]# echo $LANG
en_EN.CP1251
[root@home /]# su - andrew -c echo $LANG


[andrew@home network-scripts]$ echo $LANG
ru_RU.UTF-8


Re: Как надёжно определить текущую кодировку консоли 10.01.2010 16:33kosmonavt > С хрена ли???

Как я понял, оно с локалями не дружит, выводит в cp866 (м.б. что-то из DOS)
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 16:34BigAndy , оно с локалями не дружит
оно - это самба. Самба дружит с разными кодировками.
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 16:58Napilnik оно - это самба. Самба дружит с разными кодировками.
Телепаты ошиблись, - оно это очень ценный текстовой редактор со специальными возможностями. Уже несколько лет как русский язык в новых версиях пропал не только у меня.

>С хрена ли???
>[root@home /]# echo $LANG
>en_EN.CP1251
>[root@home /]# su - andrew -c echo $LANG

Сто раз зайти в кеды из под рута намного профессиональнее работы с этим редактором из под суперпользователя. Никакого рута, только простой пользователь. И кодировки в данном случае переключаются не командами а кнопочками.
bash-3.2$ echo $LANG
ru_RU.UTF-8


Как я понял, оно с локалями не дружит, выводит в cp866 (м.б. что-то из DOS)

Наследие доса, пока не полностью подружилось с кодировками >1 байта. Да и как подружится, если на среднестатичтическом линуксе их не определить нормально. Вы лучше альтернативный способ предложите, если знаете.
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 17:10BigAndy оно это очень ценный текстовой редактор со специальными возможностями
O_o
это что за такие редакторы, которые имеют столь специальные возможности и зачем для DOS программ нужна самба??? И что за такие возможности, которых нет в нативных линуксовых редакторах?
FreeDos прекрасно дружит с нативными линуксовыми ФС, кодировками и сетевыми интерфейсами.
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 17:22Napilnik >это что за такие редакторы, которые имеют столь специальные возможности

Те которые текст компилируют и запускают, полагаете отлаживать код нужно именно под рутом ;-)

>и зачем для DOS программ нужна самба???
>FreeDos прекрасно дружит с нативными линуксовыми ФС, кодировками и сетевыми интерфейсами.

Да что вы к самбе прицепились, линукс бывает и десктопный. И не все программы вышедшие из доса требуют его для запуска, если у вас моник 4:3 (а если нет, всё равно попробуйте, хоть и криво), запустите для расширения кругозора хотя бы вот это [kran100.narod.ru] Синтаксис: ./прога текстовик

Если хотите помочь, дайте команду которая сможет много раз оперелять кодировку консоли при её переключение кнопками меню прямо во время работы программы. Или может что-то нужно сделать чтобы переменная LANG обновилась при смене кодировки?
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 17:26kosmonavt > среднестатичтическом линуксе их не определить нормально.

Их нигде нормально не определить, если не знать заранее. LANG это забор, на котором правила написаны, как работать с локалями. Если вы переопределите LANG после запуска скрипта, который настраивает консоль, кодировка в консоли автоматом не изменится. Поэтому либо переходите на системную локаль с однобайтовой кодировкой, либо запускайте эту прогу из эмулятора терминала, который может менять кодировку отображения символов, перед этим задав в эмуляторе значение LANG с однобайтовой кодировкой.
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 18:39Napilnik >либо запускайте эту прогу из эмулятора терминала, который может менять кодировку отображения символов,
> перед этим задав в эмуляторе значение LANG с однобайтовой кодировкой.

Всё тоже самое, и в кедовской консоли и в гномовской. Получается, программе не узнать что включили в эмуляторе терминала во время её работы. А следовательно прогаммы слишком полагающиеся на LANG обречены на глюки((( Блин, заглушки что-ли ставить, внушать редактору fp что при наборе текста LANG = CP866 или смотреть как раньше с этим справлялись8-) Хотите переключить кодировку - лезьте в исходники.
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 18:43kosmonavt > LANG = CP866

А что есть такая локаль в системе? LANG=ru_RU.KOI8-R не помагает?
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 19:17Napilnik Да, все локали положенные асплинуксу имеются. LANG=ru_RU.KOI8-R выдаёт тоже самое, да и пользоваться ей криво, ни в каких прежних исходниках и литературе она у меня не встречается. Этож надо так криво редактор fpc локализовать, чтобы после версии 2.0.2 только буржуйские буквы отображались без кракозябр. Также не хочется изучать оконный интерфейс фреевизион, но похоже лучший из придумываемых способов отображения кодировок - кнопкой в меню а потом ещё раз кнопкой в эмуляторе терминала. До одного клика никак не сократить.
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 21:26kosmonavt Там *.po файлы есть?
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 22:02Napilnik И много, два про русский язык:
restest.ru.po
msgid ""
msgstr ""
"Project-Id-Version: 
"
"POT-Creation-Date: 
"
"PO-Revision-Date: 2007-06-08 00:14+0300
"
"Last-Translator: Maxim Ganetsky <maxkill@mail.ru>
"
"Language-Team: 
"
"MIME-Version: 1.0
"
"Content-Type: text/plain; charset=utf-8
"
"Content-Transfer-Encoding: 8bit
"

#: testo:testing
msgid "Testing :"
msgstr "Тестируется:"

#: testo:first
msgid "First"
msgstr "Первый"

#: testo:second
msgid "Second"
msgstr "Второй"

#: testo:third
msgid "Third"
msgstr "Третий"

restest.ru.mo
Project-Id-Version: 
POT-Creation-Date: 
PO-Revision-Date: 2007-06-08 00:14+0300
Last-Translator: Maxim Ganetsky <maxkill@mail.ru>
Language-Team: 
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
 Первый Второй Тестируется: Третий 
Но эти файлы могут быть и для винды, компилятор кросплатформенный а там таких проблем нет. Именно линуксовая версия выглядит недоделанной.
Re: Как надёжно определить текущую кодировку консоли 10.01.2010 22:35BigAndy
Цитата:
Content-Type: text/plain; charset=utf-8

Хрена се недоделанной. То что вы себе установили давно не подерживаемую ядро м кодировку, и даже шрифты для koi и cp1251 уже не включаются в дистрибутивы, - и вы хотите, чтобы у вас работало?
Re: Как надёжно определить текущую кодировку консоли 11.01.2010 01:20Napilnik Чёто вы ерунду грите - до экономичной лампочки поддержка ядром кодировок, а буквы в шрифтах одинаковые, буквенные, перед выводом на экран конвертнуть информацию и всего делов. Возьмите редактор kwrite, и если есть в консоли кои и цп1251, пишите на них на здоровье - практика опровергающая ваши теории. А также редактор fp из древнего дистра fpc 2.0.2 в котором русские шрифты на современных линуксах совсем не глючат, это вам не из размазанных по системе библиотек и заголовков большие программы собирать чтобы глючило от обновления софта. В теме обсуждалась неполадка с редактором из нового дистра 2.4.0 Если в нужном месте поставить заглушку на гото, русский язык есть, но с глюками: портится псевдографика, заходить надо под утф8 а потом переключаться на однобайтную кодировку - где-то глючит конвертация.
Чтобы всё сделать аккуратно и эффективно и нужно определение текущей кодировки, кто ж знал что это ахиллесова пята линукса((((((( К примеру, запустим в консоле mc, поставим другую кодировку, хоть иврит, хоть CP1251 и пролистаем страницы, полазим по менюшкам... Впечатляет? А всё от того что программа не умеет считывать изменившуюся кодировку консоли и конвертировать символы псевдографики.
Re: Как надёжно определить текущую кодировку консоли 11.01.2010 21:23kosmonavt > заходить надо под утф8 а потом переключаться на однобайтную кодировку

Содержимое файлы локализации в utf-8, системная локаль тоже, зачем переключаться на однобайтную кодировку? И еще впрос: как вы переключаете кодировку консоли?
Re: Как надёжно определить текущую кодировку консоли 12.01.2010 02:56Napilnik > И еще впрос: как вы переключаете кодировку консоли?

В гноме и кедах, в верхней части консолей есть кнопки, например у konsole от третьих кед: настройка\кодировка и выбирай хоть иврит. В гномовской консоли нужно настраивать, опять же кнопками, большее количество предлагаемых кодировок. Это полезно, таким способом кодировку можно изменить при работающем приложении: слушаешь радио через мплаер, а там текст в CP1251 прислали, ну не отключаться же для смены локали. При переключении таким способом, содержимое переменной LANG не изменяется!

>Содержимое файлы локализации в utf-8,

Неизвестно что те файлы локализации делают, пока их действия не замечал никак. Может они на название валюты и формат записи даты влияют.

>системная локаль тоже, зачем переключаться на однобайтную кодировку?

У системной локали символы с длиной от 1 до 4 байтов, если внутренняя кодировка программы однобайтная, и она не обучена принимать информацию в многобайтной кодировке, нажмёшь на клавишу один раз а печатается два символа. В клавиатурном буфере всё однобайтное, нужно ещё приложить усилия чтобы из однобайтных данных собрать одно, двух, трёх или четырёхбайтные. При этом текущая кодировка неизвестна)))))
Но есть и другая причина. В редакторе может быть несколько окон, и в них можно не только кодить но и читать коменты, книги по программированию которые были написаны во времена доса, в однобайтной кодировке. Можно конечно всё конвертировать в utf8 но как быть с данными записанными не цифрами и латинскими буквами(например псевдографика)? Язык такое разрешает, а после конвертации случится страшное.

Подкрутил пару строчек, сделал для русских букв cp866 при конвертации такое же действие как и для цифр и русский язык появился. Но разработчики снова чудят, на svn лежит такая мегаисправленная версия что хоть стой хоть падай. Это должно пойти в серию в будущем - басурмане, по русски не пониме, им бы винду локализовывать.
Re: Как надёжно определить текущую кодировку консоли 12.01.2010 09:41BigAndy
Цитата:
. При переключении таким способом, содержимое переменной LANG не изменяется!

при переключении таким образом локль и не меняется.!!! Локаль != раскладка клавиатуры.
Re: Как надёжно определить текущую кодировку консоли 12.01.2010 10:57peter_ir Не знаю насчёт консолей Gnome и KDE, но в xterm кодировка локально меняется
на желаемую командой LANG и только так её можно переустановить. Если, например,
из одного xterm запустить другой и командой LANG изменить локаль, то она
изменится только в этом xterm. Всё это выше уже объясняли. Попробуйте запускать
эти консоли из xterm с установленной локалью. Если же вам надо переключать
локали несколько раз во время работы, то это что-то странное.
Re: Как надёжно определить текущую кодировку консоли 12.01.2010 16:49Napilnik BigAndy Пишет:
-------------------------------------------------------
> . При переключении таким способом, содержимое
> переменной LANG не изменяется!
> при переключении таким образом локль и не
> меняется.!!! Локаль != раскладка клавиатуры.

А к локали случайно не относится набор байтов загружаемый в буфер системы при нажатии на одну из клавиш? Он реально меняется при любом переключении. Не изменяются ни от чего только сканкоды клавиш.
Re: Как надёжно определить текущую кодировку консоли 12.01.2010 19:03kosmonavt > А к локали случайно не относится набор байтов загружаемый в буфер системы при нажатии на одну из клавиш?

И да, и нет. Можете в xorg.conf указать несколько раскладок для разный языков. Обычно символы из этих раскладок относятся к национальным символам, оговоренных в локалях, хотя ничто не мешает вам сделать раскладку, например, для символов псевдографики.
RSS-материал