Подтвердить что ты не робот

Как проверить, поддерживает ли компьютер пользователя Emoji?

Этот вопрос может быть обобщен на любой символ, я полагаю; но мой конкретный вариант использования - эможи.

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

На данный момент у меня есть взломать место, которое просто отфильтровывает их на не-OS X; но я не хочу менять пользователей Linux, у которых есть настройка с поддержкой emoji. Я бы предпочел сделать это правильно.

Спасибо! 💖

4b9b3361

Ответ 1

Ваш script должен:

  • знать, какие системные шрифты доступны, и где находятся файлы шрифтов (например, C:\Windows\Fonts)
  • проверить эти файлы для их содержимого. Я предполагаю, что их проверка может быть выполнена технически, распутывая форматы файлов. Но вы также можете имитировать визуальное использование, вычисляя ограничивающий прямоугольник или моделируя использование шрифта для символов Emoji.

Если вы находитесь в PHP, вы можете вычислить ограничивающий прямоугольник шрифтов TTF, которые известны для Emoji, и посмотреть, будет ли это значение ожидаемым шрифтом, который его поддерживает.

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

Вы также попросили проверить, отобразит ли это текущее приложение терминала. Для этого вам нужно иметь возможность проверить конфигурацию, которая не является тривиальной, поскольку вам нужно будет различать все приложения терминала. Практическое решение было бы отображать некоторые Emoji с текущим шрифтом и просто спросить пользователя, если он видимый. В конце концов, вам все равно нужно полагаться на пользователя, если приложение терминала должно поддерживать Emoji?

Ответ 2

Bash

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

echo -e '\xE0\xA5\xA5' | wc -m

wc -m подсчитывает количество отображаемых символов. Если вы обнаружите, что отказ в выдаче заставляет строку ввода печатать, это должно быть способом выполнения ожидаемой проверки длины. Если вы обнаружите, что отказ в рендеринге вызывает визуализацию по умолчанию, я бы предложил передать вывод эха в проверку равенства:

echo -e '\xE0\xA5\xA5' | grep -q 'some-default-failure-symbol'

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

Node.js

Примечание: работает только в браузере, возможно, макет-браузере. Не знаете, как или если макет-браузер найдет локальный пакет emoji, но, вероятно, это легко проверить.

Существует модуль node.js, который использует очень простой код, чтобы проверить, поддерживает ли система/браузер emoji. Код пытается отобразить emoji и может определить, был ли рендер успешным.

Вызывается пакет npm: если-смайлики

Исходный код всего несколько строк, и его должно быть легко понять, если вы знакомы с javascript (я не буду копировать и вставлять полный код здесь, чтобы оставить Dafrok с кредитом): https://github.com/Dafrok/if-emoji