LINUX.ORG.RU

ncurses и KOI8-R

 


0

2

Как выясняется, современные ncurses по дефолту не умеют дружить с KOI8-R, но это лечится выставлением локали внутри программы (через setlocale()), после чего начинает нормально работать addstr(). А вот addch() для символов помимо ASCII - нет, не работает. В целом-то всё работает, да, но как-то это не совсем правильно хранить символы в строках. Может быть я что-то ещё упустил из виду?

★★★★★

2016
KOI8-R
как-то это не совсем правильно
Может быть я что-то ещё упустил из виду?

Да не, суть ухвачена.

t184256 ★★★★★
()

setlocale не «лечит», она обязательна если ты работаешь с чем-то сверх ascii. И да, 8битные кодировки давно похоронены.

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

Я не пользуюсь curses, и вам не советую. Зачем? В CLI менюшки только в mc или каком-нибудь alsamixer нужны, GUI через веб-морды делается. Вывод: curses нужна только для mc.

Однако, как ни странно, mc превосходно работает в кошерной кодировке. Ну, а хрюникодом пусть японцы с китайцами пользуются.

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

8битные кодировки давно похоронены

Молодой человек, нехорошо врать!

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

ncurses не только для менюшек нужен. Через него, например, ещё такой софт как lynx и vim работает. А ещё он незаменим для написания игр в псевдографике. А так, да, CLI хватит всем.

saahriktu ★★★★★
() автор топика

Как выясняется, современные ncurses по дефолту не умеют дружить с KOI8-R

И совершенно правильно делают. За однобайтные кодировки руки надо отпиливать ржавым лобзиком.

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

А почему не за Linux? Плодят зоопарки тут, понимаешь, нет бы всем юзать один стандартный Windows...

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

А почему не за Linux? Плодят зоопарки тут, понимаешь, нет бы всем юзать один стандартный Windows...

Потому что Linux дает возможности которых нету у Windows, а KOI8-R это атавизм и если он исчезнет то всем будет только лучше.

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

KOI8-R это атавизм

Перефразирую:

Русский язык — это атавизм, и если он исчезнет то всем будет только лучше.

Что, не так разве? Поубивал бы хрюникодопихателей!

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

Русский язык — это атавизм, и если он исчезнет то всем будет только лучше.

Так.

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

Потому что на ЛОРе слишком много неадекватных модераторов появилось. Я сюда больше из-под рега ходить не буду.

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

Дык, тогда тем паче нафиг не нужен хрюникод. Смотри: весь мир переходит на редуцированный английский; для записи любых текстов нужна вообще лишь ASCII.

НУ И НА КОЙ ЧЕРТ ЭТОТ ВАШ ХРЮНИКОД БУДЕТ НУЖЕН В ЭТОМ ИДЕАЛЬНОМ МИРЕ?

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

НУ И НА КОЙ ЧЕРТ ЭТОТ ВАШ ХРЮНИКОД БУДЕТ НУЖЕН В ЭТОМ ИДЕАЛЬНОМ МИРЕ?

Чем тебя, придурка, юникод-то обидел?

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

Однобайтные кодировки тоже дают возможности, которых нет у юникода. Например, возможность хранить каждую букву кириллицы в одном единственном байте. В этом смысле юникод в 2 раза жирнее. Соответственно, однобайтные кодировки помогают экономить память как в оперативке, так и на носителях. Также нет необходимости дополнительно разбирать строки, разделяя одни символы от других. Это экономия процессорного времени. Да и, вообще, нет необходимости дополнительно утруждать себя переходом на wide-char функции, можно как прежде кодить через привычные. Понятное дело, что только что пришедшим в кодинг может казаться, что всё самое новое самое лучшее, но лет через 20 им самим будет тяжело переходить на новые 4-х байтные кодировки, и они будут сталкиваться с такой же непримиримостью новичков уже того времени.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от anonymous

До идеального мира ещё дожить нужно. А сейчас — упрощаем как можем (и что можем). В частности, хранение и обработку текста на разных языках.

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

Во всех нормальных языках кодировка скрыта за абстрактным интерфейсом, соответственно, через 20 лет никаких проблем не будет.

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

Какие ещё интерфейсы? Классические функции читают по одному байту. Да и в памяти вместо «Юникод must дай!» будет «п╝п╫п╦п╨п╬п╢ must п╢п╟п╧!». Допустим, мне нужно вывести строку с 9-го символа. В первом случае достаточно просто скормить strptr + 8 (n - 1), а во втором случае так уже работать не будет. Т.е. нужно писать отдельную логику, которая в случае юникода будет разбирать строку, отсчитывать символы, а уже потом скармливать strptr + 13.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 2)
Ответ на: комментарий от saahriktu

Ну так не нужно пользоваться говном, в котором «классические функции читают по одному байту», лол. 2016 год на дворе. Возьми современный язык, который умеет отличать байтстринги от текста.

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

Вы не умеете читать. Я говорю про то, как всё традиционно удобно работает. И в те годы, когда я учился, никаким юникодом ещё и не пахло. И я рад этому. Благодаря этому у меня есть хороший навык работы со строками через strptr + charshift, где strptr - указатель на строку, а charshift - на сколько символов нужно сдвинуть указатель. Это классика и очень удобно.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Не надо объяснять идиоту, что он идиот. Не поймет все равно.

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

работает

Не работает, потому что люди в реальном мире используют больше 256 символов для записи текста. Вы, ретрограды, можете этот факт игнорировать, только не нужно потом удивляться, что вас считают деревенскими дурачками и предлагают не пользоваться говном.

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

Что, не так разве? Поубивал бы хрюникодопихателей!

Конечно же нет, путаешь теплое с мягким.

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

если ты пишешь обработку текста на микроконтроллере то вопросов нет, в остальных случаях профит не стоит е***ли с кучей разных кодировок.

но лет через 20 им самим будет тяжело переходить на новые 4-х байтные

utf-8 это и есть 2-6 байтовая и ее хватит на долго.

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

Также нет необходимости дополнительно разбирать строки, разделяя одни символы от других. Это экономия процессорного времени

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

однобайтные кодировки помогают экономить память как в оперативке, так и на носителях

Это называется «на говне сметану собирать».

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

люди в реальном мире используют больше 256 символов для записи текста

Вы хотите сказать, что юзеры однобайтных кодировок находятся в нереальном мире?

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от no-such-file

А ты unsigned char используешь?

Спасибо, работает.

Это называется <<на говне сметану собирать>>.

Нет, это называется «не умножать сущности сверх необходимого, и не платить за это умножение». Если юзеру достаточно латиницы и кириллицы, то зачем ему проблемы с многобайтными кодировками?

Соответственно нужно возиться с разборкой 4-х байтных слов на байты.

Ну так в случае юникода нужно не только на отдельные байты разбирать, но потом ещё и парсить эту кашу на отдельные символы. А в случае однобайтных кодировок каждый байт уже символ и наоборот.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 2)
Ответ на: комментарий от saahriktu

Если юзеру достаточно латиницы и кириллицы, то зачем ему проблемы с многобайтными кодировками?

Затем, что это ты как разработчик решил, чего ему точно будет «достаточно» (640 килобайт мы все помним). А когда он однажды столкнется с другой кодировкой, он выкинет твой кусок кода на помойку.

Более того, я еще понимаю, зачем нужна кодировка 1251 — на ней винда работает, на худой конец — 866 (что уже было бы очень странным выбором), но причин для использования KOI8 нет ровным счетом никаких, это самая уё ужасная кодировка из имеющихся.

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

Я не бегаю, выставляя людям локаль принудительно. Люди сами себе её выбирают. И если человек выбрал локаль KOI8-R - это его выбор. Я же не запрещаю людям выбирать в качестве локали UTF-8. Хочется - пожалуйста. Но, почему тогда юзеры юникодных локалей насильно навязывают их другим людям?

Многие юзеры Linux'а и прочих UNIX'ов традиционно выбирали локаль KOI8-R. И я в их числе. И для нашего круга я вполне могу писать в KOI8-R, не так ли?

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

зачем ему проблемы с многобайтными кодировками

А в чём проблемы? Проблемы сейчас обычно с koi8-r, т.к. локализацию в ней хрен найдешь, нужно ручками всё самому перекодировать.

потом ещё и парсить эту кашу на отдельные символы

В ucs-4 как правило не нужно.

no-such-file ★★★★★
()
Ответ на: комментарий от saahriktu

Многие юзеры Linux'а и прочих UNIX'ов традиционно выбирали локаль KOI8-R. И я в их числе. И для нашего круга я вполне могу писать в KOI8-R, не так ли?

Ага, вас таких уже двое.

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

Многие юзеры Linux'а и прочих UNIX'ов традиционно выбирали локаль KOI8-R. И я в их числе. И для нашего круга я вполне могу писать в KOI8-R, не так ли?

Я выбирал. Однако выбор в то время был скорее эстетическим. Основная проблема, которая осталась до сих пор это а) переключение раскладки в голой консоли б) keymaps, вопрос где располагаются ":" и "?" на клавиатуре. Редко но метко, проблема была и в consolefont, потому что конвертора либо не было, либо он был кривой.

Как бы там ни было, koi8-r был дефолтом на фряхе, на линуксе же с приходом terminus-font стало по-барабану, какая кодировка :)

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

Странно, у меня как не было так и нет таких проблем. Я сразу привык к той раскладке, которая сегодня кругом именуется как «legacy» (',' - shift + 6, '.' - shift + 7, ...). РУС/ЛАТ я до этого привык переключать по ctrl+shift, а такого по дефолту не было, да, но конфигуратор Debian'а за меня скомпоновал нужный файл данных, который я скопировал, и с тех пор могу использовать везде, в т.ч. и в LFS'е.

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

Кроме дебиана есть много других дистрибутивов. Вот у меня сейчас клава ":" = shift + 6. В те времена привык либо к переключению по шифтам, либо по capslock. Переключалки по ctrl+shift или alt+shift в каких-то кодировках не работали. Честно, даже не помню всех деталей как было.

Вобщем, было время :)

--

Пиши проги на уровне midnight commander: с переключением кодировки налету.

gh0stwizard ★★★★★
()
Ответ на: комментарий от no-such-file

Проблемы сейчас обычно с koi8-r, т.к. локализацию в ней хрен найдешь, нужно ручками всё самому перекодировать.

Миф. Никаких проблем с KOI8-R нет за исключением некоторых софтин. Почти весь софт прекрасно продолжает работать с KOI8-R и выводить локализованные сообщения, включая gcc, coreutils,... и т.д. Другой вопрос, что ряд софтин может вообще идти без локализаций и выборов кодировок, но это касается в т.ч. и юникодного софта. Тот же Pidgin в консольной версии нельзя отучить от юникода, но есть bitlbee + irssi.

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

Но, почему тогда юзеры юникодных локалей насильно навязывают их другим людям?

Потому что они — такие же уроды, как Леня Потный. Чмыри и сволочи. Больше ничего не скажешь.

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

Проблемы сейчас обычно с koi8-r, т.к. локализацию в ней хрен найдешь, нужно ручками всё самому перекодировать.

Что за наглое 4.2? Я с 2004 года, как на линукс пересел, пользуюсь только локалью КОИ8-Р. И ничего ручками не надо. Да, во всяких бубунтах нонче понаделали косяков, но просто нужно использовать линукс, а не бубунту. В генте все отлично!

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

Почти весь софт прекрасно продолжает работать с KOI8-R

Дык это понятно. Я о том, что во многих случаях софтины идут с .mo файлами в utf-8 без вариантов. Если из исходников собирать, то да, нет проблем.

no-such-file ★★★★★
()

Как выясняется, современные ncurses по дефолту не умеют дружить с KOI8-R

Ну это что-то совсем новьё. Откатывайся до CP866.

devl547 ★★★★★
()
Ответ на: комментарий от no-such-file

А ничего, что gettext автоматом конвертирует локали? Вот у меня mo-файлы в КОИ8-Р, но на хрюникодовых локалях локализация не ломается!

Проблема только с рукожопными быдлокодерами, которые забывают правильно локаль настроить в main() перед использованием gettext.

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

Все равно не понимаю причин выбора именно KOI8 в 2016 году. Почему не хотя бы cp1251? Чисто из-за того что «традиционно»?

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

У меня, например, тупо традиционно: изначально была КОИ8. Если бы изначально была 1251, был бы на ней.

Нафиг мне нужно тонны текстовых файлов перекодировать из кои8 в, скажем, 1251? Вот же делать нефиг!

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