Сообщения И виноград

1
>>>
Под "начинающими программистами" я подразумеваю скорее школьников, а не студентов. Кнута читать явно рановато.

Тем не менее, я являюсь сторонником того, чтобы уже на самых ранних этапах обучения все упрощения носили реалистический характер. Как говорится, "делать нужно всё просто, насколько возможно; но не проще".
2018.05.03
Тема Ответить
2
>>>
2018.05.03бкрс Какова конечная цель? Призываете к смене стандарта?

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

И вроде бы кажется, что с большинством языков так и выходит, если использовать простую двухбайтовую кодировку (типа UCS-2 = UTF-16 без суррогатных пар).

Большая нужность кодирования символов типа кучки дерьма (U+1F4A9) не кажется очевидной.

Что нарушает эту простую и стройную картину? Действительно ли нужны расширения двухбайтовой схемы для кодирования китайского языка? И если они действительно нужны, то нужно ли российскому программисту знать о существовании суррогатных пар? Нужен ли вообще этот термин "суррогатная пара"? Или же терминологию можно построить таким образом, чтобы российский программист мог бы ничего такого не знать, и при этом писать всю жизнь отличные интернационализированные программы, пригодные и для китайцев?

Если совсем огрублять, будет ли самосогласованной и всеобъемлющей такая точка зрения, что кодировка UTF-16 является исключительно 2-байтовой, но некоторые пары символов графически принято изображать лигатурами (в том числе китайскими иероглифами)?
2018.05.03
Тема Ответить
3
>>>
Спасибо за разъяснения. Я чувствую, что у меня уже есть некоторое понимание принципов кодирования китайских текстов. Smile

Складывается ощущение, что некий условный "общий знаменатель" между тем, что говорю я, и тем, что говорите Вы - это кодировка UTF-16. То есть вроде как китайцам нет особого смысла полностью сохранять при кодировании текста способ клавиатурного ввода. А если при кодировании китайский иероглиф считать разновидностью "лигатуры", то суррогатная пара в качестве такой "лигатуры" ничем не хуже, чем закодированный способ клавиатурного ввода (а на самом деле, видимо, лучше - ввиду большей экономности).

Но тут возникает другой вопрос.

Когда я смотрю на кодировку кириллицы в UTF-8, у меня возникает стойкое ощущение,
что в этом случае уже русские буквы оказываются двухбайтовыми "лигатурами". Причём операции, которые кажутся для русского языка "элементарными" (с точки зрения не-программиста), оказываются вовсе не такими уж простыми для
программиста (скажем, преобразование регистра). Всё это кажется некоторым издевательством над русским языком и некоторой противоестественностью. В кодировке UTF-16 этого нет. И для русского восприятия в этом плане вроде как UTF-16 лучше, чем UTF-8.

Но если кодировку UTF-16 подсунуть китайцам и объяснить им, что некоторые иероглифы - это такие "лигатуры" в виде суррогатных пар, у них тоже будет ровно такое же ощущение "издевательства" над языком? У них столь же естественно желание легко выделять начало "лигатуры"-иероглифа? И нет ли такого, что основные общеупотребительные иероглифы в UTF-16 укладываются в 2 байта, а 4-байтными оказываются только весьма редкие?

Я даже глянул, как кодируются в Юникоде некоторые популярные китайские иероглифы. Некоторые в UTF-16 требуют два байта, а в UTF-8 - три. То есть вроде как и китайцы должны любить UTF-16 больше, чем UTF-8?

Эти вопросы имеют ещё вот какой подтекст. Некоторые люди считают, что UTF-8 лучше, чем UTF-16, и что Майкрософт (в отличие от линуксоидов) сделал ошибку, когда основной кодировкой для системных вызовов Windows принял UTF-16, а не UTF-8 (как у линуксов). Но вот пока что я склоняюсь больше к правоте Майкрософта. И вроде как это решение должно нравиться больше не только русским, но и китайцам.
2018.05.03
Тема Ответить
4
>>>
Спасибо. Это всё очень интересно. И в значительной мере ведёт к тому, что мне нужно свои мысли переформулировать.
С учётом внесённых поправок, мне пока представляется такая картина.
Конкретно китайцы что-то набирают на обычной клавиатуре. Пускай пиньинь.
Всё равно комбинаций кнопок, набираемых последовательно или одновременным комбинированием, совсем не много: несколько десятков.
Вот их-то и представляется целесообразным сохранять в качестве компьютерной записи текста.
Проблема же отображения сохранённого текста путём формирования иероглифов - это другая проблема,
которую нужно решать по тем же принципам, как формируются лигатуры в европейских языках.
То есть составить "словарь" лигатур, и каждой лигатуре сопоставить свой алгоритм начертания (кодирование векторной графики).
Хотелось бы понять, почему китайцы так не делают? Или делают?

Что касается общих вопросов относительно всех имеющихся языков вообще, тут Вы меня не переубедили.
Попытка раз и навсегда составить набор символов когда-либо использовавшихся человечеством (и символов, которые будут использоваться)
представляется химерой и утопией (лично мне, но, видимо, не Консорциуму Юникода).
Когда-то 7-битная кодировка ASCII расширялась до различных 8-битных кодовых страниц типа CP866 или CP1251 (для кириллицы).
Представляется актуальным сохранить примерно такой же механизм расширений.
В качестве "базового ядра" взять уже не латиницу, а все символы живых языков (что-то типа UCS-2).
Живых языков, имеющих свою письменность, вроде бы не так уж и много. Вроде пишут, что порядка сотни.
Значит, кодирующих символов скорее всего меньше 10 тысяч. То есть 16 бит вполне достаточно, и даже на расширения хватит.
Иметь представление символов в виде комбинаций фиксированного числа бит (16-ти) - очень удобно:
в последовательности любой символ легко отыскивается по номеру, легко программируются стандарные операции со строками.
Если памяти жалко - архиваторы в помощь. Сожмут всяко лучше, чем UTF-8.
(Кодировку типа UTF-8 следует рассматривать как один из множества алгоритмов сжатия.)

Касательно того, что "огромное количество комбинаций ключей никогда не встретится в составе одного иероглифа".
Это к чему? Огромное количество комбинаций русских букв никогда не встретятся в составе одного русского слова. И чего?

В общем, хочется понять, насколько тяжело китайский язык может быть вписан в прокрустово ложе описанной схемы.
Никто не утверждает, что это совсем просто и безболезненно. Но ведь и организация набора китайского языка на стандартной клавиатуре - задача не из простых.
Однако приходится её как-то решать.
2018.05.02
Тема Ответить
5
>>>
Китайского не знаю. Интересуюсь кодированием текста в компьютере.
Есть такое подозрение, что 16 бит на один символ (типа UCS-2) - вполне достаточно для кодирования всех современных языков. При этом кодировки c переменным числом бит на символ, доходящим до 32 (типа UTF-8, UTF-16), представляются излишними. Применительно к китайскому языку это выглядит так:
При наборе иероглифа на компьютере китайцы всё равно используют обычную клавиатуру и набирают последовательность ключей. Эту последовательность ключей и нужно записывать в компьютере при кодировании текста. Иероглифы же получаются объединением последовательных ключей абсолютно по тем же принципам,
как буквы объединяются в лигатуры: При графическом отображении текста несколько подряд идущих ключей нужно изобразить одним знаком. Соответственно, попытка считать иероглиф отдельным символом - ненужное усложнение.
Согласны ли в целом с такой точкой зрения уважаемые китаеведы? Или тут что-то принципиально неверно?
2018.05.02
Тема Ответить