LINUX.ORG.RU

ncurses и KOI8-R

 


0

2

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

★★★★★
Ответ на: комментарий от proud_anon

Символ - это то, из чего складываются слова и строки текста. В «др.шт.вемам сва-джанам кр.шн.а йуйутсум самупастхитам сиданти мама гатран.и» 9-й символ - 'м'. Если ещё не совсем понятно о чём речь, то поясняю: про аналог «MID$(A$,9,LEN(A$)-9+1)» в Basic'е.

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

В конце-концов все нелюди будут уничтожены, и весь мир будет говорить на нормальном языке, который вполне в КОИ8-Р впишется!

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

Юникод

Однобайтные кодировки тоже дают возможности, которых нет у юникода. Например, возможность хранить каждую букву кириллицы в одном единственном байте. В этом смысле юникод в 2 раза жирнее.

На самом деле не в два. Исторически ASCII целиком легла в начало юникода и все символы оттуда занимают всего один байт. На англоязычных\испанских текстах распухания как такового нету, а для остальных языков цифры, знаки препинания, переводы кареток, пробелы и табы до сих пор занимают всего один байт.

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

А, понятно.

Ну и насколько осмысленное такое разложение? Покажи любому рускоговорящему человеку слово «др̣шт̣вемам̇» на бумаге (ожидаемое отображение такое) и спроси, сколько там символов. Он либо сразу скажет, что девять, либо спросит, имеешь ли ты в виду буквы. А если ты ему скажешь, что точки — это отдельные символы, покажи ему потом слово «йог» и посмотри, сколько он тебе символов насчитает.

А твоё решение выведет строку не с 9-го символа, а с 9-го условного кода. Какой прок нормальному человеку от него, если то, что оно считает символами — это совсем не то, чего он ожидает?

Это я к чему? К тому, что символ — понятие растяжимое. Для кодирования большинства английских текстов понадобилось менее 128 символов, поэтому и придумали ASCII. Но когда мы начинаем смотреть шире, оказывается, что всё не так просто — даже в том же английском языке. Трудности Юникода заключаются не только и не столько в особенностях форм кодирования, сколько в том, что кодировать все языки мира вообще очень сложно, но использовать отдельные кодировки для каждого языка ещё сложнее, проблематичнее и затратнее. Ведь японцы и китайцы ещё до изобретения Юникода пользовались отнюдь не восьмибитными кодировками, у них в 8 бит все нужные символы просто не влезали.

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

Ведь японцы и китайцы ещё до изобретения Юникода пользовались отнюдь не восьмибитными кодировками, у них в 8 бит все нужные символы просто не влезали.

Да и до сих пор не влазят.

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

Неужели непонятно, что это тот пример, который обретает смысл в определённых контекстах? Я привёл пример с цифрой 9, но она может быть и не 9. Всё зависит от конкретной задачи, в рамках которой предварительно определяется где отрубать. Это могут быть как задачи форматирования текста под фиксированную ширину, так и другие задачи выделения подстрок.

Например, в 2006-м году я пробовал пилить свой шелл. И там, например, после обнаружения того, что команда начинается с «cd » указанный далее путь выделялся отрубанием лишних 3-5 символов:

        if (strncmp(clstr, "cd ", 3) == 0) {
            if (strncmp(clstr + 3, "~", 1) == 0) {
                (void) chdir(getenv("HOME"));
                clstr += 2;
            }
            (void) chdir(clstr + 3);

символ — понятие растяжимое

А вот и нет. И для людей и для кодировок текста вполне определённое. Да, иероглифы тоже являются символами, но не для тех кодировок, в которых отсутствуют. Другой вопрос, что людей могут терзать сомнения выделять ли разные штрихи и точки сверху и т.п. в отдельные символы или нет, но это уже вопрос ограничения конкретной кодировки, поскольку для человека все эти разные варианты являются разными символами.

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

Я теперь сру из-под анонизмуса.

anonymous
()
13 апреля 2016 г.
Ответ на: комментарий от saahriktu

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

utf8 имеет переменную длину. От 1 до 4 (и в перспективе 6) байт

cvs-255 ★★★★★
()
Последнее исправление: cvs-255 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.