«Й» вам не «и» краткое! О важности нормализации Unicode

    й

    За последние полгода интернет просто наводнила «буква» «й». Я встречал ее на новостных сайтах, в мессенджерах, на хабрахабре и geektimes. «О чем вообще речь?» — спросите вы — «Я вижу обычную букву й!». Вам повезло. Я вижу ее так:
    image
    image
    image
    image
    image
    Если вы из тех счастливчиков, у кого буква «й» выглядит так же, как и «настоящая» «й», вот вам фокус: скопируйте ее (букву «й») в блокнот, поставьте курсор в конец буквы и нажмите backspace. Магия, отвал башки просто!
    Как же так получается?

    Графемы, глифы, code points, компоновка и байты

    Очень краткое введение:
    Графема — то, что мы привыкли называть буквой в смысле единицы текста. Глиф является единицей графики, и может графически представлять саму графему или же ее часть (например, различные диакритические знаки: ударения, умляуты, надстрочное двоеточие у буквы ё и т.д.).
    Code Point — то, как записывается текст в представлении Unicode. Одна графема может записываться разными code points.
    Code Points кодируются различным байтовым представлением в зависимости от стандарта: UTF-8, UTF-16, UTF-32, BE, LE…
    Языки программирования, как правило, работают с code points; для нас, людей, привычно мыслить глифами.

    Давайте же наконец разберемся с нашей буквой й. Что же в ней такого особенного?
    Эта буква представляет из себя одну графему («и» краткое), но записана она двумя code points:
    U+000438 CYRILLIC SMALL LETTER I
    U+000306 COMBINING BREVE

    Если вы проделали фокус с нажатием backspace, вы как раз и стерли COMBINING BREVE, или, говоря полиграфическим языком, значок краткости над гласной.

    Обычная буква «и» краткое, которую мы все с вами привыкли набирать клавиатурой, представляет из себя композитный символ, который записывается одним code point:
    U+000439 CYRILLIC SMALL LETTER SHORT I

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

    Чем это плохо?

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

    За примером далеко ходить не нужно: относительно свежая статья с обзором мыши на geektimes, скриншот из которой приведен выше в статье. Давайте выполним поиск в Google по следующей фразе, которая, вроде как, есть в статье:
    никто не мешает создать «пустой» профиль

    image

    Пост выдается вторым результатом, и, как видно по выделенной жирным части, у нас полное текстовое совпадение. Отлично, открываем его и пытаемся найти на странице этот же текст и видим, что Firefox ничего не нашел:
    image

    Поиск по Geektimes также не выдает подходящего результата:
    image

    Но стоит заменить композитную «й» на ее декомпозитного собрата «й», как все встает на свои места:
    image

    Очевидно, что Google как-то преобразовывает запрос поиска, позволяя искать по глифам, а не по их code points.
    Как это работает?

    Нормализация

    Стандарт нормализации Unicode описывает две эквиваленции символов: Canonical и Compatibility. Первая как раз позволяет сравнивать одинаковые глифы с разными code points, а вторая позволяет их сравнивать с упрощенными аналогами — ½ с 1/2, ℌ c H и т.д.

    Также существует 4 типа нормализации:
    • Normalization Form D (NFD) — canonical-декомпозиция. Разложит cześć (привет по-польски) на с, z, e, c + ´, s + ´.
    • Normalization Form C (NFC) — соберет то, что разложил предыдущий вариант.
    • Normalization Form KD (NFKD) — compatibility-декомпозиция. Сделает 1/2 из ½, 25 из 2⁵.
    • Normalization Form KC (NFKC) — попытается собрать то, что разложила предыдущая.

    Если говорить о сайте типа хабрахабра, то имеет смысл производить NFC-нормализацию всех постов до их публикации, а поисковой запрос подвергать NFKD-обработке.

    В Python, например, это можно сделать модулем unicodedata.
    Скрытый текст
    import sys
    import unicodedata
    print(unicodedata.normalize('NFKD', sys.argv[1]))

    % python unicode.py cześć | hexdump -C
    00000000 63 7a 65 73 cc 81 63 cc 81 0a |czes..c...|
    % echo 'cześć' | hexdump -C
    00000000 63 7a 65 c5 9b c4 87 0a |cze.....|

    Заключение

    Не могу сказать с полной уверенностью, кто виноват в появлении «й» в рунете, но подозрение падает на Google Docs. К счастью, похоже, баг починили, т.к. уже 3 недели мне не приходилось смотреть на уползшую кратку.

    Проблемы с глифами случаются и в оффлайне. Вот фотография реального паспорта с буквой, вероятно, «ё» (CYRILLIC SMALL LETTER IE + COMBINING DIAERESIS)

    image
    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 124

      +3
      Unicode все больше напоминает какую-то немыслимое нагромождение вещей, относящихся по сути к разным уровням абстракции.
      Хотя всего-то — таблица символов. Должна быть таблица символов — если делать по уму.
      Зачем вообще было делать возможность прикручивать всякие надстрочные символы к любой букве? Тогда бы уж и математическую нотацию поддержали, всякие верхние/нижние индексы, подчеркивания/надчеркивания/перечеркивания/обводку, многоэтажные дроби и корни и прочее.
      Только тогда это был бы уже не Unicode, а полноценный язык разметки. А это совсем не то, ради чего создавался Unicode. ИМХО конечно.
        +27
        Зачем вообще было делать возможность прикручивать всякие надстрочные символы к любой букве?

        Как обозначить символ ударения в строке? Сдублировать все возможные символы с этим символом? Думаю что не сто́ит.
          0
          А как обозначить верхний индекс (x в степени n)? Дублировать все цифры и буквы всех алфавитов еще два раза (для верхнего и нижнего индексов)?
          Чем ударение концептуально отличается от индекса?
            +5
            Цифры-то есть: x¹, x², x³…
              +1
              Ну в реальном применении цифры без букв малополезны. Хотя-бы латинский алфавит напрашивается… но где в таком случае остановиться? Допустим, корень — это символ √ и надчеркивание над всеми символами подкоренного выражения. Вроде сделать несложно — по аналогии с ударением ввести верхнюю черту над символом (а может такая уже и есть). Но дальше пойдут вложенные корни. Их как?
                +3
                Латинский алфивит у Unicode есть почти весь (нет почему-то только буквы q): ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ ⁱ ʲ ᵏ ˡ ᵐ ⁿ ᵒ ᵖ ʳ ˢ ᵗ ᵘ ᵛ ʷ ˣ ʸ ᶻ.

                Что включать, а что нет — над этим очень долго думают, да. Понятно что всё это — некоторый компромисс, но как бы понятно, что как минимум IPA поддерживать нужно — оттуда всё и идёт.
                  0
                  У меня на планшете отображаются только: h j n w. Остальные заменены пробелами.
                    0
                    Я подозреваю, q отсутствует по вине Bell Labs.
                    Вот так выглядели их кнопочные номеронабиратели:
                    seriss.com/people/erco/dtmf_bell_labs/sv11111219.jpg
                    +4
                    Частицы бы, ли, же пишутся через пробел! Как можно так косячить в такой перфекционистской дискуссии?
                0
                И сколько этих «всех возможных» символов могут иметь ударение? 6 гласных в латинице, 10 в кириллице, еще несколько (не знаю точное количество) в греческом. Умножаем на два для прописных букв. Итого аж меньше 50. При овер миллионе кодопоинтов в текущей версии стандарта.
                Как надо было делать правильно: для каждого языка свой набор символов, даже если внешне они совпадают. То есть кодопоинт немецкой А должен отличаться от английской А (так же как он сейчас отличается от кодопоинта русской А). Тогда для каждого конкретного языка можно однозначно было бы определить коллацию (алфавитный порядок и таблицу подстановок при поиске и сравнении). В которой, например, русские символы и, И, й, Й все приводились бы к И для целей сравнения, как это и должно быть по правилам конкретно русского языка. При этом для украинского языка коллация была бы другой. Потому что она и есть другая. Если бы кодопоинт русской И отличался от кодопоинта украинской И, всё работало бы «из коробки». Но сейчас программисты должны явно указывать, какую коллацию нужно использовать — вот только 99% слыхом про все эти заморочки не слыхивали.
                  +15
                  Угу, вот только тогда немцам пришлось бы иметь две раскладки на компьютере, если бы они захотели набирать текст и на английском, и на немецком, и не забывать переключаться между ними. При том, что все буквы английского алфавита содержаться в немецком, никто в своем уме этим заморачиваться бы не стал. Таким образом, мы получим гору текста на английском, которую англичане могут прочитать, но по которой не работает поиск. Точно так же поиск с включенной немецкой раскладкой не работал бы по тексту, набранному в английской, что с точки зрения пользователя (которому пофиг на проблемы программистов) — баг.
                    +2
                    Хочу только добавить, что идея разделить кириллические и латинские символы пришла в голову разработчикам тоже не сразу. На какой-нибудь БЭСМ-6 они были слиты «де юре», на ЕС ЭВМ они были слиты «де факто», но уже на СМках их разнесли. То есть это просто оказалось удобнее. Французы же и немцы ничего такого даже не пытались сделать, то есть им этого было не нужно.

                    Всё это случилось задолго до появления Unicode 1.0.
                      +1
                      На эту тему есть интересная заметка в преамбуле стандарта юникода.
                      Хотя общеизвестно, что европейские алфавиты унаследованы друг от друга (греческий породил два потомка — латиницу и кириллицу) и многие буквы в них совпадают, тем не менее, в лингвистике принято считать их разными алфавитами. В том числе из-за сложившихся культурных отличий в начертании некоторых «совпадающих» букв (например, α — a — а. Обратите внимание на разницу в начертании латинской и кириллической «a» в одном и том же шрифте).
                      А вот на востоке всё наоборот, совпадающие иероглифы не дублируются для разных языков.
                        +2
                        А вот на востоке всё наоборот, совпадающие иероглифы не дублируются для разных языков.
                        Там всё хуже. Изначально там попытались объединить якобы одинаковые иероглифы, чтобы вписаться в 65536 символов. Что в результате привело к страшной путанице, которую «разрулили» через одно место. А уж что они сделали с флагами — это вообще ни в сказке сказать, ни пером описать.

                        P.S. Особенно радует что Unicode 8.0 в том месте, где должны описываться эти самые флаги ссылается на github. В раздел «Google Internationalization». А если завтра github обанкротится или Гугл перестанет этой темой интересоваться, то что — всё? Уже никто и никогда не сможет быть уверен, что он правильно реализует стандарт?
                          0
                          А что там с законодательным запрещением некоторых последовательностей символов?
                          Это я про emoji и вариации на тему компоновки: MAN+MAN+HEART и типа того…
                      +1
                      Не скажу за немцев, но во многих латино-алфавитных странах раскладок действительно две, английская и родная с местными спецсимволами (умляутами и т.п.).
                      Определение языка по словарю никто не отменял, да.
                        0
                        вот только тогда немцам пришлось бы иметь две раскладки на компьютере, если бы они захотели набирать текст и на английском, и на немецком, и не забывать переключаться между ними


                        ШОК! У немцев и так две раскладки :)
                          +1
                          ну так идея в том что имея немецкую раскладку можно писать символы английского алфавита, а вот с английской раскладкой символы немецкого — нет
                        +10
                        В русском языке «И» и «Й» все-же разные буквы (как и буквы «Е» и «Ё»). То что у буквы есть какие-то элементы не связанные с ней непрерывными линиями, не значит что эти элементы нужно выделять в отдельные символы, и в дальнейшем лепить любой другой букве. Ударение — ладно, соглашусь, это отдельный символ. Может быть в каких-то специальных случаях нужен отдельный символ " ̆ ", но использовать его для конструирования существующих букв неверно.
                        И, если возвращаться к исходной проблеме, ошибка в том что кто-то прилепил к букве «И» верхний элемент, получив таким образом визуально другую букву.
                        Я могу аналогично сделать букву «Ы» из мягкого знака и латинской L: «Ьl». Но зачем?
                          +4
                          То что у буквы есть какие-то элементы не связанные с ней непрерывными линиями, не значит что эти элементы нужно выделять в отдельные символы, и в дальнейшем лепить любой другой букве.
                          Конечно нет! Только вот беда: кратка (да, это русское слово) — это какой-то там элемент, а отдельная сущность. И может ставиться не только над «и», но и на «у» (в белорусском — получается "ў"), над «а» и «е» (в чувашском — получаются "ӑ" и "ӗ"), а в старославянских текстах могла употребляться ещё и над "ѵ", «ю» и другими буквами. Наиболее распространённые комбинации имеют отдельные юникодные символы, но на всякие «А҃» и " А҉" букв не напасёшься.

                          Я могу аналогично сделать букву «Ы» из мягкого знака и латинской L: «Ьl». Но зачем?
                          Именно: незачем. Потому что знак «ы» логически на две сущности не разделяется. А вот «и» краткое (вы хоть на название-то обратите внимание, да?) — разделяется.
                            +1
                            А вот «и» краткое (вы хоть на название-то обратите внимание, да?) — разделяется.

                            «И» и Й" это две разные буквы. Название буквы тут вообще не при чем.
                            Надстрочные элементы как таковые могут быть отдельными сущностями и использоваться в каких-то особых случаях (то же ударение или еще что-то) — но это не делает букву «Й» состоящей из двух символов. Иначе эта «кратка» занимала бы отдельное место в алфавите, чего не наблюдается.
                              +4
                              Иначе эта «кратка» занимала бы отдельное место в алфавите, чего не наблюдается.
                              Конечно не наблюдается! Какой же идиот диакритику в список букв заносит?

                              Надстрочные элементы как таковые могут быть отдельными сущностями и использоваться в каких-то особых случаях (то же ударение или еще что-то) — но это не делает букву «Й» состоящей из двух символов.
                              Разумеется. Её делает состоящей из двух элементов тот простой факт, что в 35-буквенном русском алфавите её нет. А использовался он вовсе не так и давно — меньше ста лет назад.

                              Если вы считаете что Unicode призван обслуживать ваши личные потребности, то вы ошибаетесь. Мир, он, как бы, не вчера родился и в нём есть много вещей, про которые вы ничего не знаете — но это не значит, что они никому не нужны. Для ваших личных потребностей, я уверен, сгодился бы вариант и без римских цифр и без многих других чудес.
                                +4
                                Позволю себе вклиниться в ваш спор.
                                khim Вы, конечно, правы, что в дореволюционном алфавите такой буквы нет, и для поддержки старых текстов её добавили наряду с древнешумерской письменностью, как Вы указали в комментарии ниже.
                                Но в современном русском языке де-юро и де-факто такая буква есть, также как в белорусском алфавите есть у краткое.
                                Откройте эту статью в Википедии, пункт 4.
                                По формальному статусу:
                                • знаки, с помощью которых образуются новые буквы алфавита (в западной терминологии их иногда называют модификаторами, а не собственно диакритическими знаками);
                                • знаки, сочетания букв с которыми не считается отдельной буквой (такие диакритические знаки обычно не влияют на порядок алфавитной сортировки).
                                и далее:
                                ударения — ставятся только в редких случаях и не образуют новых букв;
                                две точки над «ё» — образует новую букву, но часто опускается;
                                кратка над «й» — образует новую букву и никогда не опускается;
                                По вашему же, получается, в Unicode должна отсутствовать полноценная буква современного алфавита только потому, что она образована модификатором.
                                По моему скромному мнению, NeoCode также не во всём прав: диакритические знаки входить в Unicode также должы, для формальной поддержки тех же старославянских текстов.
                                  +2
                                  По вашему же, получается, в Unicode должна отсутствовать полноценная буква современного алфавита только потому, что она образована модификатором.
                                  А вот этого я не говорил. Более того, совершенно очевидно, что там отдельная буква «й» обязана присутствовать — хотя, возможно, как compatibility character. Просто потому что всякие странные кодировки типа ДКОИ-8 её содержат. А вот нужно ли считать канонической записью «й» или «й» — это уже большой вопрос. Как уже было замечено MacOS скорее склоняется в первому варианту, Windows — ко второму, и у тех и у других есть доводы «за» и «против».

                                  По поводу того что может «складываться» и «раскладываться» в своё время много копий сломали, но сейчас-то всё уже давно устаканилось, канонические таблицы как бы всем доступны, так что неясно почему этот вопрос всё ещё возникает. Написано что «й» может «расколадываться» — значит раскладиывается. Не написано, что «щ» и/или "ꚗ" могут раскладываться — значит не раскладываются. Чего шуметь-то?
                                    +3
                                    «Й» достойна быть самостоятельным элементом Unicode уже хотя бы по тому, что это не просто «И» краткая (которой гораздо ближе символ «i»), а по природе своей отдельный звук имеющий совершенно иную природу произношения: «и» — гласный звук, «й» — согласный. «И» и «Й» не чередуются в корнях слов, в отличае от «е» и «ё», которые в этом смысле — суть одно и тоже.
                                    0
                                    Её делает состоящей из двух элементов тот простой факт, что в 35-буквенном русском алфавите её нет. А использовался он вовсе не так и давно — меньше ста лет назад.

                                    Буква й пришла в русское светское письмо из церковнославянского грубо говоря при Никоне. А исчезла по повелению Петра I, отменившего все надстрочные знаки. Через небольшое время кратка восстановилась, но й отдельной буквой не считалась. И только большевики объявили её снова отдельной буквой.
                                  0
                                  >А вот «и» краткое (вы хоть на название-то обратите внимание, да?) — разделяется.
                                  Тогда почему в алфавите она присутствует как самостоятельная буква? В немецком гласные с умляутом — это именно обычные гласные с умляутом, их нет в алфавите.
                                    +2
                                    В шведском å, ä, ö — обычные буквы алфавита. И шведский алфавит это не A-Z, а A-Ö.
                                      0
                                      Зато есть «эсцет», которую тоже упразднить давно хотят.
                                    –7
                                    Буквы И и Й разные, но по факту взаимозаменяемые. Любителями андройда, например. Хотя это и безграмотно, но в южных губерниях общепринято.
                                    А вот точки над Ё даже по правилам ставятся только в том случае, если их наличие/отсутствие влияет на смысл. В случае все/всё, например, или в именах собственных.
                                      0
                                      Дело даже не в любителях «андройдов». Как я уже писал: дело в том, что ещё каких-то 100 лет назад буквы «й» не существовало, а знак " ̆" можно было ставить не только над «и». А поскольку Unicode должен позволять набирать не только современные тексты и будет странно если он будет совместим с древнешумерскими текстам, но не будет поддерживать старославянские, то и имеем то, что имеем — всякие чудеса типа ꙝ҇…
                                        +4
                                        Малограмотные граждане без проблем заменяют на «и краткую» и безударное «е».
                                        Взаимозаменяемыми от этого «и», «й» и «е» не становятся.
                                          –7
                                          Да плевать, много или мало в этом грамоты.
                                          Гуманитарии они вообще люди такие, оторванные от реальности.
                                          Вот допустим, у вас интернет-магазин телефонов.
                                          И вот вы анализируете логи поиска и выясняете, что 3% посетителей ищут [нокия андройд]. И дальше вы можете или искать по правилам юникода, или по правилам сложившейся практики.
                                          Ну, если вы владелец магазина, вы, конечно, можете удовлетвориться осознанием собственного грамматического превосходства над этими убогими.
                                          Но если вы всего-лишь разработчик, то, с точки зрения владельца, вы допустили баг, который снизил его доходы с поиска по сайту на 3%. И он имеет полное право вычесть убытки из вашей зарплаты.
                                          Шутки шутками, но битрикс, который требует mbstring.func_overload=2 на этапе установки, многократно окупается уже за счёт этого — относительно джумлы и ворпресса, где в плагинах сплошь и рядом тупорылые вызовы однобайтовых строковых функций.
                                            +9
                                            И он имеет полное право вычесть убытки из вашей зарплаты.

                                            Интересная позиция. Этот гипотетический владелец магазина и прибылью наверно с программистами делится тогда, раз считает допустимым убытки с них вычитать?
                                              –5
                                              Ну, в мире эльфов и единорогов — может быть, кто-то действительно и делится.
                                              В том несовершенном мире, который дан нам Господом в объективных ощущениях и строчках ТК — работодатель вправе лишать премии (которая может достигать 40% от зарплаты) за умеренно-некачественное исполнение служебных обязанностей. А вот вопрос начисления плюшек почти всецело отдан на откуп договору между фирмой и сотрудником.
                                                +7
                                                Согласитесь, что «лишать премии за умеренно-некачественное исполнение служебных обязанностей» и «и он имеет полное право вычесть убытки из вашей зарплаты» это таки сасем чут-чут разные вещи, да?

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

                                                Я, правда, сам это больше десяти лет назад наблюдал (просто прекратив общаться с российскими работодателями), но мои знакомые говорят, что за эти десять лет ничего толком не изменилось…
                                          +10
                                          Взаимозаменяемые? А в каких губерниях говорят «йрйдйи» вместо «иридий»?
                                        +1
                                        И сколько этих «всех возможных» символов могут иметь ударение?
                                        100500, как бы. Лингвистика — интересная наука, но для того, чтобы возможность как-то записывать слова языков, не имеющих письменности требуется изрядно ухищряться.
                                          +1
                                          Плюс все вариации всех гласных из всех языков — с бреве, умляутами и так далее. Плюс заглавные тоже.
                                          0
                                          Насколько помню, в юникоде есть как буквы с ударением одним codepoint, так и дополнительный codepoint ударения.
                                            0
                                            А вы уверены, что это именно буквы с ударением, а не, к примеру, часть венгерского алфавита?
                                            https://ru.wikipedia.org/wiki/Венгерский_алфавит
                                              0
                                              не уверен
                                        0
                                        А каким браузером и шрифтом вы пользуетесь?
                                          0
                                          Firefox, Liberation Sans. Такая же проблема под Windows 7 с IE 11 на Meduza, например (у них там PFRegalTextPro-RegularB).
                                          meduza.io/news/2015/06/11/v-gosdumu-vnesen-zakonoproekt-ob-ispolnenii-gimna-rossii-v-shkolah
                                            0
                                            FIrefox 39, Liberation Sans. Проблемы нет.
                                              +5
                                              Забавно, у меня Firefox (на Ubuntu 15.04) показывает сам топик в DjVu Sans, и там все нормально. В комментариях почему-то Liberation Sans. В заголовке окна и вкладки шрифт Ubuntu, и там «кратка» съехала.
                                            0
                                            del
                                              –4
                                              Буква «й», которую я ввожу с клавиатуры, и котороую просите скопировать вы — разные. Определено экспериментально и при помощи шрифта.
                                                +5
                                                Так о том и топик — что у буквы й есть 2 представления: одно в виде единого символа, а другое — составное. И в некоторых программах они ведут себя по-разному. А также в некоторых шрифтах они ведут себя по-разному.
                                                +6
                                                Я всегда думал, может быть наивно, что «и с краткою» вместо однобуквенного «й» вставляет какой-то макосный софт.

                                                Потому что я видел этот символ часто во блогозаписях одного блоггера, о котором достоверно известно, что человек этот — пользователь «Эппл».

                                                Неужели тут всё же не «Эппл», а «Гугл» повинен?
                                                  +2
                                                  Вот, честно говоря, полностью не уверен. На маках мы получали нормальную «й», но в интернете я действительно находил сообщения, что на маках такое есть. Правда, они все были старые, лет 5 назад, возможно, что-то поменялось в новых версиях.
                                                    0
                                                    А можно ссылку?
                                                      +4
                                                      От маководов не раз получал zip-архивы, где вместо «й» в имени файла была комбинация «и» и кратки. Так что что-то у яблок не так, как на windows в этом плане.
                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                          +2
                                                          На маке файловая система (HFS+) использует decomposed unicode, на форточках (например NTFS) — composed. (А на линуксе — как повезет, можно получить обе сразу).

                                                          Иногда получаются проблемы — архивы, синхронизация файлов, вот это все. В svn с этим долго боролись в свое время.
                                                            +2
                                                            А на линуксе — как повезет, можно получить обе сразу
                                                            На линуксе самый простой и «естественный» подход к именованию файлов. Имя файла — это любая последовательность байт в которой нет символов '/' и '\0'. Что здорово упрощает ядро, но приводит к куче проблем в других местах.
                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                          +2
                                                          >вот вам фокус: скопируйте ее (букву «й») в блокнот, поставьте курсор в конец буквы и нажмите backspace. Магия, отвал башки просто!
                                                          У меня ubuntu, а что не так, объясните? заинтриговали…
                                                            0
                                                            Не работает, башка (знак краткости) не убирается, буква не превращается в обычное «и»? Что за браузер? Может, особенность IME? В убунту какой, ibus?
                                                              +3
                                                              Я тоже попробовал, gedit, Ubuntu 15.04. Буква удаляется полностью. ibus выключен.
                                                                +2
                                                                а уж как PHPStorm колбасит от комбинирующих символов — мама дорогая.
                                                                  0
                                                                  Да, PHPStorm'у очень плохо от этой й
                                                                    0
                                                                    А поделитесь скриншотом, пожалуйста — любопытно.
                                                                      0
                                                                      i.imgur.com/NjDgFsk.png это просто строка с разными символами для теста ) местоположение курсора отмечено стрелкой. При перемещении курсора символы прыгают в разные стороны. Заметьте где закрывающая кавычка и точка с запятой — между ними на самом деле нет пробелов — это артефакты.
                                                                  +1
                                                                  Я вас не понял
                                                                  > Не работает, башка (знак краткости) не убирается, буква не превращается в обычное «и»?
                                                                  я просто попробовал в gedit, и всё норм.
                                                                  >Что за браузер? Может, особенность IME? В убунту какой, ibus?
                                                                  мне интересно как это в windows происходит на примере блокнота и не понимаю причём здесь браузер.
                                                                    +1
                                                                    А, я думал, вы в браузере в поле «ответ» копируете. У меня KDE4, выглядит это так:
                                                                    a.1339.cf/mbyzyb.webm
                                                                      0
                                                                      прикольно))) у меня тоже… браузер мазила.
                                                                        0
                                                                        кстати, delete по другому работает — удаляет символ полностью
                                                                          0
                                                                          в фф/вин7 аналогично, й превращается в и
                                                                        0
                                                                        mac os x yosemite. не работает.
                                                                          +3
                                                                          От «блокнота» зависит. В nano работает, например.
                                                                            0
                                                                            Кажется тут еще зависит от чего-то… Вставил ту самую «й»
                                                                        0
                                                                        тогда используйте gedit
                                                                          0
                                                                          в gedit всё корректно, поэтому и задал вопрос.
                                                                            0
                                                                            Значит это зависит не от редактора а от движка.
                                                                            у меня в gedit оно вывелось как 2 символа рядом, но курсор за черточку от буквы й поставить не давало — т.е. сам gedit видел это как 1 символ.
                                                                        +3
                                                                        уже 3 недели мне не приходилось смотреть на уползший умляут

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

                                                                        Кстати, об умляутах — я уже много лет время от времени вообще смотрю вот на такое:



                                                                        И еще долго буду смотреть, потому что многим просто не приходит в голову, что кто-то может в Германии включить кириллицу для неюникодных приложений (да, я в курсе про applocale). Хотя казалось бы — юникод уже почти четверть века существует.
                                                                        Я настолько привык к этим «цffnen» и «schlieЯen», что даже и не замечаю уже — как будто так и надо. А у вас — «галочка уползла», понимаешь…
                                                                          +4
                                                                          Вообще если быть дотошным, то эта галочка над й — не умляут, а «кратка» или «бреве» — так по крайней мере википедия утверждает.
                                                                          Спасибо, исправил.

                                                                          Эх, я как-то с японской локалью сидел, тоже насмотрелся на C:¥Program Files¥
                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                              +4
                                                                              Так там локаль, наверное, японская с SHIFT JIS установлена, только у нее такая особенность
                                                                              ru.wikipedia.org/wiki/Shift_JIS
                                                                          +1
                                                                          подобная статья уже была на Хабре. В ней было рассказано все то же самое, примеры с браузерами приводились, причем даже тесты в разных.

                                                                          Сам в первый раз встретился с подобным не в теории на Ютубе. Скачал ролик, копипастом с ютуба назвал его, а потом натравил на него видеоредактор, а тот не смог файл открыть. Начал я пытаться этот ролик открыть разным ПО до тех пор, пока один не открыл его с такой ошибкой, какая мне помогла вспомнить статью из начала коммента — имя файла исказилось в последней позиции (там тоже должна была быть «й»). Проверил — так и есть: на ютубе в названии фигурировал комбинирующий бреве.
                                                                            0
                                                                            Хм, если найдете, линканите, пожалуйста. Я не нашел, когда искал.
                                                                              +2
                                                                              news.shamcode.ru/blog/sanitize-this-i-search-that автор удален, поэтому статья исчезла — в избранном кусочек текста нашел и загуглил
                                                                              вот еще подробная статья на эту тематику: habrahabr.ru/post/45489
                                                                                +2
                                                                                Спасибо, хорошая статья и информативные комментарии. Обидно, что автора удалили.
                                                                                  +3
                                                                                  Автор я; удалить меня не так просто, но с тех пор все такие статьи пишутся исключительно на английском и выкладываются в места, где нет воинствующей русскоязычной школоты.

                                                                                  По мотивам этой заметки я тогда написал и более-менее полновесную библиотеку для руби, которая умеет композицию и декомпозицию, up-case и down-case, и так далее. Работает с современной версией описаний юникода от консорциума. Если надо — пожалуйста: github.com/mudasobwa/forkforge
                                                                            0
                                                                            Когда я написал комментарий про косяк с «отображением» этой буквы, где-то тут же, меня просто проигнорировали. Мне встречалось такое поведение только на хабре/гике.
                                                                              +2
                                                                              Как пишут любители повыпендриваться: «ьi»
                                                                                +7
                                                                                Так пишут люди с украинской раскладкой, скорее.
                                                                                +17
                                                                                А̴̓͗̊͊͗̾̓͆͋͂ͧͥ̐ͭͩ҉̦̠͕͉̗̫̞̀ ̶̘͔̭̟̘͚̬̙̫̥͓͉̭͖͉̟̰̻̠́̂ͦ̿̽̚͜͠е̵̛̮̖̻͕̹̦̟̖̔̆̆̏ͤ̑́͘͝щ͖̖͚̯̖͉̳̪͉̠̝̤͔̠͚̊ͬ͆͂̃͂̇̿ͦͪ̉̋̀̕͢͟͡ё̵̡̛͈̘͚̲̪̼͇ͥ̍ͥ̉ͫ̄̃ͩͭ̓̆ͧ̿̓ͦ͆̌͠͞ͅ ̧̧̢̞̹̟̜̼̮̠̤͍̮̤̱̗͓͛̒̔ͭ̿̒͗ͮ̓̐̒̿͘͜м̺̜͕͉̻̲̝̞͕͙̘̫̉̍͌ͩ͛̀͜оͣ͐̒̓̈͗̏̍ͬͨͨ̑ͮ̌͏̵͚̳̮̦ж̵̸̸ͩ͋̾̉͗̊ͭ̑͌͛̐ͩ͏̩̤͔̰̦͜н̶̑ͥ̿͛̌҉̀҉͖̜̰̲̟̭̪̮̳о̶̱̗̻̲͇͎̩̺͋̇̈́̔͂ͣͩ̍͑ͪ͆̉ͮ̓̅ͮ̒ͨ͢͟͟ ̷̷͉͍͙̔ͭͥ͊̇͊͗̽̒̐ͦ̃ͭ̆ͫ̚̚͠ͅв̢̢̛̩̺̭̻̻̟̳̭̭̘̝̉͗ͯ̚͜ͅсͬ̌͑ͣ̿̅̑ͥ̈́̔̌ͤ̚͞͏͕̬͉͈̰̹͇̪̹̠́́п̶͙̘̜̝̫̻̬͙̟̠̬̠̬̟̣̥̙̣͋̎̋̽͐̈́̑ͮ̅ͯ̐ͮͨͯ̓̚̕о̴͚̜̫͈̮̰̳̀̆̂̊ͬ̀̈́͗͂̐ͧ̂̀ͫ̍͘͜м͗̅͂͐̓̔͊̃ͨ͊͐ͪ̇̂ͥ̒̃͆҉͞͏̨̘͈̲͈̩̟͇̼̦̟̥̗͍̫̟̮н̵̡̟͍͓͕̪̯̱ͩ̅̉͌ͬͦ̇͋̍̎͊͛̇̾̏͊ͧ̚̕и̧̞̼̺̤̹̹͇͉̣̬̩̜̘̲̥̮̫̯̟͂̈̋̑ͭ̈̂͆ͦ̂̑͛ͭ͢т̶̧̧͉͙͍͖̗̦̖̝̥ͮͥ̓̆ͭ̏̉̄̐̚ь̙̲̰̦̪̜̩̻͓͇̰̳̙̗͛ͩͪ̃͑ͬͫͬ̀ͪ͋̈́̋ͫ̓̋́́̚ ̷̮͇̻̦̱̣͕̰̜͎̖̩̜̈̃̃̄̎̆̀ͦ͊͂̊̌̽͆ͤ͆Z̧̞̹͚͕̖̣̝͕ͥͦ̂͋͐̈̈̋̀̍̎̌̑͛̀̓́̌͜Ẳ̴̶͈̰̼͉̬̮͔̝͓̭̟͇̮̣̖̳̰͊̑ͤͪ̀̓̓̽͡L̨̨ͤ͂ͭ͒ͭ́͢҉̶͙͕̩̯̙̙͕̠͙̳͙̲̳̫͍̖͓̭Ǵ̨̛̟̪̦̣͔͔͈͉̤ͨ͗̐̒̓̒͛̂̋̈O̶ͥͫ̒̒ͩ̌̋ͦ̈́ͦ̓̄̽̈́̎́̚͝͏̬͙̣̞
                                                                                  +1
                                                                                  Вы очень
                                                                                  суровы
                                                                                    0
                                                                                    На какой системе смотрите, интересно?
                                                                                    Артефактов нет
                                                                                    image

                                                                                      +2
                                                                                      Arch Linux, KDE, chrome 43. В консоли хрома другие артефакты (например, нет черточек вокруг А). То что отрендерилось содержит 32 разлоичных глифа из Arial, 11 из DejaVu Sans и 11 из Liberation Mono. В общем, поддержка такого юникода у меня в шрифтах — так себе.
                                                                                        +1
                                                                                        Ubuntu 15.04, yandex browsr.
                                                                                          +1
                                                                                          Ubuntu 12.04, Gnome, Google Chrome 43 — вижу квадратики вместо некоторых диакритических знаков.
                                                                                            +1
                                                                                            Ubuntu 14.10, во всём кроме Firefox такая же фигня с квадратиками. В Firefox всё отлично.
                                                                                            +1
                                                                                            Win 7, FireFox
                                                                                              0
                                                                                              Интересный эффект, если выделить

                                                                                              +2
                                                                                              Судя по количеству символов, которое я вижу:

                                                                                              Скрытый текст
                                                                                              Много символов по вертикали, наезжающих на заголовки этого и следующего комментария


                                                                                              (тоже firefox, как и у GAS_85, но amd64 Gentoo linux), у вас либо жуткие артефакты, либо зарезана информация.

                                                                                              Там же, chromium
                                                                                              Много символов по вертикали, наезжающих на заголовки этого и следующего комментария

                                                                                              Там же, старая Opera
                                                                                              Много символов по вертикали, наезжающих на заголовки этого и следующего комментария







                                                                                              Все браузеры с “полноценными” движками (gecko, blink, qtwebkit, presto) отображают этот комментарий одинаково, “консольные” браузеры с урезанными движками показывают что‐то непонятно.
                                                                                                0
                                                                                                Почему‐то хабр зарезал все спойлеры, кроме первых трёх:

                                                                                                Скрытый текст
                                                                                                Firefox:
                                                                                                Много символов по вертикали, наезжающих на заголовки этого и следующего комментария
                                                                                                Chromium:
                                                                                                Много символов по вертикали, наезжающих на заголовки этого и следующего комментария
                                                                                                Старая Opera:
                                                                                                Много символов по вертикали, наезжающих на заголовки этого и следующего комментария
                                                                                                Qupzilla:

                                                                                                Lynx:

                                                                                                Links, консоль:

                                                                                                Links, GUI:

                                                                                                ЕLinks:

                                                                                                  +2
                                                                                                  Теперь зарезал все картинки, кроме первых трёх. Всё на одном изображении:
                                                                                                  171K
                                                                                          +7
                                                                                          >смотреть на уползшую кратка.
                                                                                          Слово-то склоняется. «Кратку»!
                                                                                            +9
                                                                                            Блин, ну как так. То «и» краткое, когда я всю жизнь думал, что «и» — она, буква, значит краткая, то еще и кратка склоняется.
                                                                                            +3
                                                                                            Первый раз столкнулся с уехавшей краткой именно на Маке, так что привычно виню скорее его, чем Google Docs.
                                                                                              0
                                                                                              Раньше этим еще грешил Adobe Acrobat. Например при копировании из него в Word, «й» вставлялась как 2 отдельных символа, причем Word тогда некорректно это обрабатывал и знак «кратка» съезжал. Приходилось постоянно за этим следить, особенно во всяких курсовых и прочем, где могли придраться.
                                                                                                +1
                                                                                                Если кратка уползает, то это по большей части вина определенного шрифта.
                                                                                                Попробуйте в том же блокноте с текстом с этой «й» «поиграться шрифтами».
                                                                                                Много интересного можно увидеть.
                                                                                                  +1
                                                                                                  Йопт!
                                                                                                    +1
                                                                                                    Внимание!!! Найдена «ё» (CYRILLIC SMALL LETTER IE + COMBINING DIAERESIS) в большом количестве!
                                                                                                    habrahabr.ru/company/yandex/blog/250753

                                                                                                    Написал автору публикации, может сможет вспомнить, какая ОС и софт использовался.
                                                                                                      0
                                                                                                      Я тут всрпомнил, что когда-то обращал внимание на «красивенькие» кавычки в каком-то топике. И нашёл, и бинго! Буква й там составная! Человек использовал некий iA Writer. Кстати, в топике по вашей ссылке тоже такие кавычки есть.
                                                                                                        0
                                                                                                        Видимо, вот это: iA Writer. Есть для MacOS, iOS и Android. Интересно, зараза свойственна конретному редактору или это свойство какой-то библиотеки которую они применяют и есть другие приложения с такими же свойствами.
                                                                                                          0
                                                                                                          На их сайте в справке интересная информация тут. Похоже, эти замены делает таки OSX.
                                                                                                          0
                                                                                                          Хм, там нет составных й.
                                                                                                            0
                                                                                                            Хм, похоже я действительно ошибся.
                                                                                                        0
                                                                                                        Мда… недавно боролся с неразрывным пробелом в тексте отчаянно, а тут оказывается еще интереснее всё.
                                                                                                          +1
                                                                                                          Проблема в полный рост в статье на Lenta.ru (проявляется в Firefox 40 и IE 11). В браузерах на основе Chromium (например, Opera 30 и Яндекс.Браузер) не проявляется, и поиск по странице работает корректно.
                                                                                                            0
                                                                                                            Причём лишь некоторыми местами, основная масса букв нормальные. В opera 12 тоже не работает.
                                                                                                            0
                                                                                                            Линукс, FF, mousepad — все композитные символы рисуются нормально и удаляются за единый бэкспейс.
                                                                                                              +2
                                                                                                              У картинки с заголовком статьи на хабре тоже кратка уезжает:
                                                                                                              twitter.com/ValdikSS/status/1151201065800519681
                                                                                                                0
                                                                                                                Исправили, похоже.
                                                                                                                  0
                                                                                                                  Хабр читают, поди.
                                                                                                                    +1
                                                                                                                    Я им отправил сообщение об этой проблеме 16 числа. Быстро исправили. Кеш картинки в твиттере уже истек, теперь там кратка не уезжает.
                                                                                                                      0
                                                                                                                      Что такое кратка?
                                                                                                                        0
                                                                                                                        Кра́тка (ранее кра́ткая); также бре́ве (лат. breve «короткое»), бре́вис, дуга́ — один из[1] кириллических и латинских надстрочных чашеобразных диакритических знаков; заимствована из древнегреческой письменности, где означала краткость гласных. В типографике различаются кириллическое бреве и латинское бреве: как правило, первое имеет утолщения по краям, второе — в середине
                                                                                                                          0
                                                                                                                          Грамота.ру про кратку ничего не знает. Про бреве — знает.
                                                                                                                            0
                                                                                                                            Ну так это скорее плоблема Грамота.ру. Словарь Ушакова про кратку знает, а вот про бреве как раз нет — а это, как бы, несколько более академическое издание.
                                                                                                                              0
                                                                                                                              простореч. устар.
                                                                                                                              Понятно.

                                                                                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                              Самое читаемое