LINUX.ORG.RU
ФорумTalks

По уникод


0

0

Блуждая по просторам инета, наткнулся на статью, показавшуюся мне интересной: http://live.julik.nl/2005/12/composition-normalization-and-morons Внутри есть краткий обзор подходов к хранению уникожих строк в разных языках. Безусловно, бойан, но всё ещё актуальный. Возможно кому-нибудь будет интересно или полезно ознакомиться.

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

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

bugmaker ★★★★☆
() автор топика

Что занимательно, автор этой статьи полтора года назад написал статью, как бы вы реализовали поддержку Юникода для Руби. И предлагал различные решения. Ну я подумал, что говори-говори, все равно не сделаешь нифига.

Прошел где-то год и он таки сделал эту хрень.

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

> В лиспе применяется такой же подход.

Ты вроде сейчас на Питоне пишешь. Так что там с Юникодом, Юлик правду в статье написал, что есть два типа строк? Или уже что-то изменилось?

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

Изначально-то была без utf-8, но utf-8 был впервые реализован на ней.

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

Все равно не сравнить количество. Только русских кодировок сколько...

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

не путай юникод с кодировками юникода - юникод рулит

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

> Юникод это ужаснейшее изобретение.

Почему, интересно? ИМХО это гораздо луче чем зверинец из кодировок.

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

Слишком сложное решение. Сделали бы "тупо" 4-х байтовую кодировку с жёстко закодированными буквами и всё. А не городили огород, при котором оказывается, что букву Ё можно закодировать 10 способами. Ну и как следствие имеем бардак с поддержкой юникода в ЯПах. Правильная вещь должна быть простой.

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

>> В лиспе применяется такой же подход.

> Ты вроде сейчас на Питоне пишешь. Так что там с Юникодом, Юлик правду в статье написал, что есть два типа строк? Или уже что-то изменилось?

я сейчас джангу пользую, в которой оно всё и завёрнуто, так что достоверно не знаю. В полностью уникожем окружении (для страничек и бд выставлено utf-8) вроде пока косяков не замечал.

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

4х-байтовое сильно поломало бы обратную совместимость, потребовало бы вчетверо больший объём хранения, а значит и времени доступа например к текстовой информации в бд. Да и не факт, что всё влезло бы. Потому как многие алфавиты используют модификаторы, иногда довольно сложные. А при таком подходе понадобился бы отдельный код для каждого символа со всеми доступными комбинациями модификаторов. Количество кодов для символов возрасло бы очень сильно. Вобщем, ИМХО utf8 для хранения и большей разрядности для обработки - то что надо.

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

> А при таком подходе понадобился бы отдельный код для каждого символа со всеми доступными комбинациями модификаторов.

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

концепция utf это вещь хорошая, и к моему варианту она легко прикладывается. Естественно в качестве внешнего формата хранения.

Я, грубо говоря, хочу работать со строками так же как я работаю в C с байтовыми массивами. Захотел соединить - соединил, захотел получить вырезку i - j, взял символы с i по j и получил, что надо. А с этими лигатурами, акцентами, и прочим мне ничего не понятно. Я уже не говорю о том, что ломается куча алгоритмов, сложность которых из линейной становится совсем нелинейной.

Сразу скажу, что внутренняя реализация отрисовки и прочего меня не интересует, font-engine может использовать свои знания о том, что ё это е плюс 2 точки, но я хочу быть уверен, что символ ё это символ с кодом 1234 а не символ с кодом 1234 или 2 символа с кодами 12345 и 23456 или 3 символа с кодами 7777 1111 33345. Условно говоря.

Если я несу фигню и не понимаю, что такое юникод, вы мне так и скажите :)

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

>> А при таком подходе понадобился бы отдельный код для каждого символа со всеми доступными комбинациями модификаторов.

> Это понятно, но 4 миллиарда - достаточно большое число, для реально используемых языков и символов хватило бы.

когда-то и 7 бит хватало, и даже 3 символа на 16битное слово, в RADIX. Достаточно было набито шишек, чтобы начать искать более универсальное решение.

> Я, грубо говоря, хочу работать со строками так же как я работаю в C с байтовыми массивами. Захотел соединить - соединил, захотел получить вырезку i - j, взял символы с i по j и получил, что надо. А с этими лигатурами, акцентами, и прочим мне ничего не понятно.

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

> я хочу быть уверен, что символ ё это символ с кодом 1234 а не символ с кодом 1234 или 2 символа с кодами

Примерно такими же соображениями и вызвано возмущение некоторых уникодом, про которое написано по ссылке.

> Если я несу фигню и не понимаю, что такое юникод, вы мне так и скажите :)

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

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

>Юникод это ужаснейшее изобретение

Уважаемый, вы чуш несетё, то что Unicode ужасное изобретение, скажите переводчикам, которым иногда необходимо переводить с двух-трёх языков одновременно. Для нормальной реализации поддержки Unicode в Linux, для начала, нужно переделать всеми скрываемый древний дряхлый 8ми битный телетайп с названием консоль.

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

>Для нормальной реализации поддержки Unicode в Linux, для начала, нужно переделать всеми скрываемый древний дряхлый 8ми битный телетайп с названием консоль.

А в линуксе ненормальная поддержка юникода???

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

>А в линуксе ненормальная поддержка юникода???

А что, Unicode поддерживается уже всеми библиотеками и функциями ? Я и смотрю, человек статейку да же написал.

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

А какое отношение статья имеет к поддержке юникода в *линуксе*?

Xellos ★★★★★
()

боже как я понимаю автора. Сам недавно столкнулся с тем, как буржуи переводят из char в wchar_t. Угадайте как? низачто не догадаетесь - вызывают mbstowcs без указания выходящей строки, получают ее размер, а потом ТУПО КОПИРУЮТ В ЦИКЛЕ, ПОБАЙТОВО!

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