«⠀» (Braille Pattern Blank)
Недавно один из символов Юникода немного потрепал мне нервы — в одном из структурированных файлов, содержащих пользовательский ввод встретилось что-то, что не смогло нормально сконвертироваться из UTF-8 в CP1251. Зачем там нужна именно эта кодировка оставим за скобками — ну вот такие требования.
Случаи, когда что-то не может сконвертироваться мы специально отлавливаем, так как иногда оказывается, что всё-таки можно. Особенно показателен случай с «й», когда вместо одной буквы пришла «и» скомбинированная с отдельной краткой — в Юникоде так можно. Нормализация почему-то эту пару не объединила и конвертация падала на этой странной букве.
Вот и в этот раз на чём-то упало, но увидеть это что-то не удалось — выглядел виновник как обычный пробельный символ. Я довольно быстро вычленил его код, по нему в стандарте нашли символ — это оказался пробел в азбуке Брайля. Если вдруг вы не знаете, это специальная тактильная точечная азбука для слепых, визуализация которой есть в Юникоде.
Этот пробел — странный символ, библиотеки для работы с Юникодом не считают его пробельным, но во многих шрифтах он визуально неотличим от пробела. Как его ввёл пользователь — непонятно, может случайно через какую-нибудь специальную раскладку.
Библиотека libiconv конвертировать его отказалась, хотя, как по мне, он вполне может быть сконвертирован в обычный пробел, что мы теперь и делаем.