Комментарии 40
Зачем например в Unicode «направление письма»? Unicode это просто набор символов. Как их вводить, выводить и интерпретировать — дело софта. Вот в Китае и Японии направление письма вообще «сверху вниз», но ведь Unicode такое не поддерживает? И кстати, китайцы и японцы с появлением компьютеров вполне адаптировались к направлению «слева направо», может и арабы бы также адаптировались?
Далее, регистр символов — это особенность исключительно европейских языков, унаследованная из ASCII (который создавался в условиях гораздо более жесткой экономии оперативной памяти). Понятно что старались сделать обратную совместимость, но по большому счету регистр должен был стать «декорацией» (как bold, italic, subscript или superscript), а не отдельными кодовыми точками. Символы 'a' и 'a' (курсивом) — как-бы один символ, хотя они совершенно отличаются визуально. Символы 'a' и 'A' при этом — разные. Логика?
Из-за той же обратной совместимости осталась незадействованной большая часть символов в самом начале кодовой таблицы, с 0x00 до 0x1F. А между тем их стоило бы задействовать для наиболее употребительных спецсимволов (таких например как стрелки, дополнительные знаки пунктуации, некоторые математические символы и т.п.). Размещение этих символов в однобайтовой части важно, так как именно однобайтовая часть Unicode по очевидным причинам нанесена на все клавиатуры мира. Оставить в этой области можно было бы только нулевой код и код новой строки, и заодно провести редизайн концепции переноса строки, т.к. в основных системах (Win, Mac, Linux) перенос строки устроен по-разному (0x0D, 0x0A или оба сразу).
Ну и наверное можно еще накопать таких вот нелогичностей.
Как тогда поступить с ß в немецком, например?
Unicode — это прежде всего набор символов и соответствующих им кодов. Как их использовать — дело софта. И наверное, если разные модификации (декорации) одного смыслового символа значительно отличаются и не могут быть сгенерированы программно (как в случае underline, subscript, superscript — просто подчеркиванием или уменьшением размеров), то нужно эти символы вводить отдельно…
Одинаковые символы с разными кодами (как например латинское 'A' и русское 'А') введены просто для удобства группировки, чтобы символы одного языка не были разбросаны по всему диапазону. Для европейских языков большая часть символов общая, и лишь некоторые (2..4 штуки в каждом алфавите) свои собственные — поэтому не имеет смысла вводить отдельно коды для «немецких», «французских» и «итальянских» букв 'A', а проще сформировать единый общеевропейский метаалфавит, что и было сделано. В русском большая часть символов отличается, поэтому сделали отдельный набор.
В общем понятно, что Unicode несет на себе бремя обратной совместимости не только с ASCII, но и с историей письменности как таковой:) И идеального решения не найти. Может быть нужно было радикальное решение в виде разделения абстракций — отдельно слой сопоставления символов и «кодов символов» (в этом слое все буквы, выглядящие как 'A', будут иметь единый код), и отдельно слой сопоставления «кодов символов» и «смысловых кодов» (здесь уже разделение по алфавитам). В результате было бы две кодировки — графическая и семантическая. Понятно, что это кардинально повлияло бы на все ОС и на весь софт, и мы бы жили в совсем другом мире:)
В результате было бы две кодировки — графическая и семантическая.
Так они есть. Можно сделать букву "й" так, как она написана левее, а можно и так: "й". Вы не можете заметить это глазом (конечно, если ваш браузер правильно всё делает), но второй вариант состоит из двух глифов: "и" и закорючка над ней. Вот статья на хабре про это: https://habr.com/ru/post/262679/ . А теперь, собственно, сложная часть: вы не можете в общем случае сделать upper/lower case на такие составные глифы. Потому что, например, в турецком языке есть строчная буква ı, которая получается из заглавной I. А для английского языка lowercase(I) == i.
Ваше же предложение, по сути, выглядит так: вы давайте все свои языки сведите сначала к латинице, а дальше разукрасите закорючками, если уж вам так хочется. И арабам с евреями предлагаете переучиться писать в другую сторону :)
Всё же создатели unicode пользовались концепцией, что письменность уже есть, и для каждого народа его письменность ему дорога, и нужно создать систему, которая позволить описать все их символы в более-менее логичном и единообразном виде, предоставив ещё и механизмы для каких-то общих операций типа lowercase и uppercase, а так же нормализации. То есть идти от предметной области, а не пытаться насаждать что-то новое и неестественное для каждого конкретного языка.
Если идти по пути универсальности, то почему бы и нет? А если закорючку присоединить к другой закорючке?
С одной стороны это конечно хорошо, что можно генерировать некоторые новые символы таким образом. А с другой… как-то бессистемно. Ну ввели бы тогда специальный код «escape» для специальных escape-последовательностей — и вот туда можно было бы добавить элементы форматирования. В том числе жирный/курсив/подчеркивание, капитель, верхний и нижний индекс, надстрочные и подстрочные символы (Ruby character), геометрические преобразования (поворот символа на 90/180/270 градусов или даже повороты с каким-то шагом типа 5°, отражение по горизонтали и вертикали), цвет символов (для всяких эмодзи вполне актуально, и сейчас это уже как-то делают) и т.п. Это было бы хотя-бы системно. Но тогда бы это была уже не таблица символов, а нечто большее. А сейчас оно застряло где-то на полпути…
И получится хтмл.
В результате было бы две кодировки — графическая и семантическая.
Так и есть. Для рендеринга Unicode строки, требуется множество преобразований. Кодепоинты отдельно, глифы отдельно. В прошлом проекте рендерингом занимался мой коллега, он много и интересно рассказывал про юникод и связанные проблемы. К сожалению, подробностей не помню, но тип Строка содержал пять разных представлений. 20 байт на один отображаемый символ.
Очень смелое предположение приравнять заглавные буквы к стилю типа italic или bold. Тут же оказывается что такой стиль как "заглавная" можно применить далеко не ко всем символам. Сразу получается нестыковка. Несемметричность. А хотели сделать как лучше
Интересно, а italic разве можно безопасно применять к иероглифам? Это не может исказить их смысл?
Не говоря уже о том, что italic / bold – это просто оформление, а заглавная буква семантически отличается от строчной.
заглавная буква семантически отличается от строчной
Особенно в аббревиатурах. «Пишем оду ОДУ». ОДУ — обыкновенное дифференциальное уравнение
Символы 'a' и 'a' (курсивом) — как-бы один символ, хотя они совершенно отличаются визуально. Символы 'a' и 'A' при этом — разные. Логика?
Стиль символа - это всего лишь оформление. Оно только изредка может быть использовано для отображения выделения интонацией или других нюансов произношения. Чаще всего для книг это курсив, иногда жирный шрифт или разреженные буквы. Для компьютерной переписки чаще в качестве выделения используем КАПС. Если взять несколько текстов с полностью одинаковым содержанием, но 1й будет написан обычным шрифтом, 2й - весь исключительно курсивом, а 3й - полностью буквами красного цвета, то для читателя смысл всех текстов совершенно одинаков, хотя оформлены они по-разному.
Заглавные и строчные буквы - это различие другого рода. Например, следующие фразы отличаются только регистром всего одной буквы, но несут разный смысл. «Он позвонил жене» и «Он позвонил Жене»
В первом случае, очевидно, речь идёт о супруге. Во втором случае Женя - это имя, причём необязательно женское.
Он позвонил жене - это уже речь о любимой работе. В принципе, любое изменение стиля (в том числе и начертания) делается с каким-либо смыслом. И тут мы возвращаемся к тегам strong, abbr, irony..
Русский язык на уровне языка не имеет курсива, полужирного и т.д. А вот заглавные буквы имеет.
Он позвонил жене - это уже речь о любимой работе.
Ну вот я носитель языка, я вас совершенно не понял, даже с вашим пояснением. А вот жене/Жене – вполне очевидно и однозначно.
Это русская пунктуация, по очевидным причинам, не имеет. А вот русская типографика очень даже имеет.
Находясь в контексте даже вы бы всё поняли. А без контекста и вашу "Жене" можно трактовать, не как имя, а как особо почтительное обращение к супруге. Так что для ясности надо ещё и ударение добавить.
В моем первом сообщении жирное начертание - просто для визуального выделения различий. Про «strong, abbr, irony» не понял, предложения «Он позвонил ...» содержали информацию только про факт звонка.
Находясь в контексте даже вы бы всё поняли.
Правильное написание в данном случае позволяет обходиться без контекста и понять однозначно исходя только из правил языка. А так «без контекста» даже если я напишу «позвонил супруге» вам всё равно не будет понятно какой именно - официально расписанной или гражданской, настоящей или бывшей, а может там вообще многожёнство.
А без контекста и вашу "Жене" можно трактовать, не как имя, а как особо почтительное обращение к супруге
Это по каким правилам русского языка? Правила по «вы» и «Вы» существуют и там в одном из случаев большая буква - как часть канцелярского протокола. Знаю про Человека с большой буквы, а с большой буквой для жены ничего не встречал.
Направление письма нужно, чтобы внутрь английской строки можно было положить арабскую, а внутрь той французскую.
Зачем например в Unicode «направление письма»?
Если бы направление письма касалось всегда всего текста в целом, вы, возможно, были бы правы. Но ведь направление гуляет в пределах отдельно взятого приложения. Так что это особенность именно письма а не интерпретации цельного текста.
но по большому счету регистр должен был стать «декорацией»
Почему? Названия и имена мы пишем с заглавных букв. Немцы пишут все существительные с заглавных букв. Англичане почти каждое слово в заголовках. Если этой информации не будет в самой строке, то откуда её взять? Натравливать на текст сложнейшие постпроцессоры, заранее выставляя конкретный язык, которые будут глубоко анализировать каждую строку перед выводом? Утопия.
Мне кажется главная беда UTF-8 не несуразности в кодировке, а люди. Как и в случае с временем, люди придумали избыточно сложные и часто нелогичные системы, да ещё и с таким разнообразием.
Символы 'a' и 'A' при этом — разные. Логика?
Правила правописания.
Хотя для детей, воспитанным твиттором, это может быть и не очевидно.
может и арабы бы также адаптировались?
Арабы может и да, мусульмане точно нет.
Раньше переписчикам Корана за первую ошибку отрубали руку, за вторую — голову.
В UTF-8 addslashes работает правильно
Статья автора, который вдруг узнал, что за пределами английского языка тоже есть жизнь. Или это перевод 10-летней давности?
Представляю, как бы он удивлялся, если бы увидел селектор win-koi-dos на каждой странце сайта, или статьи "как настроить апач на 8001 порт - кодировка cp1251, а 8002 порт - cp866".
"uniq_name" UNIQUE CONSTRAINT, btree (name)
При вводе пользовательской информации пользователь может свободно подделать любой адрес или имя, какое ему угодно. Это позволяет пользователю попытаться осуществить любую кражу, используя, скажем, такое же имя, как у какого-нибудь другого пользователя.
Вообще не понял данный посыл.
Использование Unicode позволяет иметь имя пользователя (адрес и т.п.), которое выглядит на экране/при печати так же, как у другого пользователя. Но никак не позволяет залогиниться под другим пользователем либо что-то сделать от его лица в любой информационной системе.
Старая добрая турецкая И/Ы может доставить очень много боли. И доставляет, в известной операционной системе, нечувствительной к регистру в именах файлов.
Если сохранять 뼧 в файл, то это EB BC A7, а не BF 27 - почему ?
Я могу предположить, что это изза utf8, но тогда и инъекций с этим символом не будет.
Поправьте где неправ.
7 ложных предположений о том, как устроены строки