Удаление неподдерживаемых символов Юникода, иначе отображаемых в виде квадратов

Я возился с каким-то javascript, который вставил бы случайный символ юникода куда-нибудь в документ. (понравились эти символы)

Однако я хочу убедиться, что я вставляю только сгенерированный символ, если этот символ не должен быть напечатан как один из этих квадратов «੟».

Пока я генерирую случайные числа от 2600 до 2699. Но я хочу убедиться, что они действительны, а не квадраты. Не обращайте внимания на тот факт, что я не генерирую шестнадцатеричные коды, а только целые числа, на самом деле не имеет значения, какие символы мне не хватает.

String.fromCharCode(2600+(Math.floor(Math.random()*70)));

Позвонив несколько раз, я получил бы: "ਖ਼੕ੁ੡਴਱ੜਯ੉".

Ваше здоровье!


person Spectraljump    schedule 19.05.2012    source источник


Ответы (2)


Есть две основные вещи, которые могут отображаться как такие квадраты (или вопросительный знак в ромбе, или что-то совершенно другое, например, значение кодовой точки в квадрате):

  1. Недопустимый символ, который заменяется символом замены U+FFFD для отображения.
  2. Символ, у которого нет глифа в выбранном шрифте (или другом, который может быть заменен).

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

person Joey    schedule 19.05.2012
comment
Я понимаю. Итак, когда в шрифте нет глифа определенного штрих-кода, браузер заменяет его на ੡, но базовый код остается прежним? Другими словами, вы не можете определить, был ли этот ੡ написан в документе. - person Spectraljump; 19.05.2012
comment
Да. В вашем случае я вижу маленькое поле с 0A61, которое даже не является символом. - person Joey; 19.05.2012

Просто потому, что сейчас воскресенье, я взломал небольшой JS, который проверяет, выглядит ли кодовая точка, нарисованная на холсте, как символ 0xFFFF. Это был просто вопрос сравнения пикселей. Поэтому, если ваш шрифт (в примере кода я использую любой системный шрифт по умолчанию) не имеет кодовой точки, то он рисуется (надеюсь) точно так же, как 0xFFFF.

Это можно было бы улучшить, но как воскресный взлом это вполне удовлетворительно. Вы можете проверить код на GitHub.

person dda    schedule 27.05.2012