Как я могу узнать, доступен ли символ на растровом шрифте? - PullRequest
0 голосов
/ 31 октября 2010

Обновление

Поскольку никто до сих пор не дал достаточно хорошего ответа, я переформулирую его:

Как бы я узнал в сценарии оболочки в Linux, если есть поддержка в текущем растровый шрифт для данного символа юникода?

Вот и все: не в gnome-терминале с его необычной поддержкой TTF и различными кодировками: обычный металлический tty без X.org

Старый вопрос (может прояснить что-то в приведенных выше предложениях)

Я пишу программу со специальными символами.Такие символы, как װאבדג (иврит).

Используя некоторые Ubuntu, которые мне здесь пригодились, я мог заставить их работать в среде X (внутри gnome-терминала).В rxvt я получаю странные символы вместо того, что есть в файле;и в чистом xterm я получаю некоторых из них.

Сам файл может быть таким же простым, как

letters="⅄ႥႣႬזלבגװאבדגהוזחטענסףמלךלכפץצקႠႣႤႥႬႫႹჄႾႨ"
letters=$(echo $letters | sed -e 's/./\0\n/g')

letters=$(for i in $letters; do echo "$RANDOM$i" done | sort -rn | sed -e 's/[0-9]*//g')
echo $letters

В OS X он просто показывает "nnnnnnnnnnnnnnnnnnnnn".

В tty без X.Org запущен, он просто показывает алмаз.

Во всех терминах у меня есть

LANG=es_ES.UTF-8

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

Ответы [ 3 ]

1 голос
/ 31 октября 2010

В Mac OS X вы можете проверить Terminal.app на готовность к UTF-8:

defaults read com.apple.Terminal StringEncoding  # 4
defaults read com.apple.Terminal DoubleWideChars  # YES

Кроме того, Mac OS X использует FreeBSD sed, которая не принимает \0.

printf "%s" "$letters" | sed $'s/./&\\\n/g'
printf "%s" "$letters" | gsed $'s/./&\\\n/g'
printf "%s" "$letters" | awk -vFS="" '{for(i=1;i<=NF;i++) print $i}'

# randomize letters
letters=$(echo $letters | sed $'s/./&\\\n/g')
# note the additional ";" after "${RANDOM}${i}"
letters=$(for i in $letters; do echo "${RANDOM}${i}"; done | sort -rn | sed -e 's/[0-9]*//g')
echo $letters
1 голос
/ 08 февраля 2013

Вы можете хотя бы проверить, настроена ли текущая кодировка эмулятора терминала на обработку символов UTF-8. И если это так, ваш текущий растровый шрифт должен также поддерживать символы в кодировке UTF-8.

LC_ALL= locale charmap  # UTF-8

Значение переменной окружения $TERM может также дать подсказку, способен ли ваш текущий терминал обрабатывать символы UTF-8, e. г. rxvt против urxvt.

И, наконец, что не менее важно, вы можете поиграть с такими инструментами, как tconv, ttyconv или luit для конвертации в и из UTF-8.

См:

1 голос
/ 31 октября 2010

У вас есть ошибка здесь:

echo $letters | sed -e 's/./\0\n/g'

РЕДАКТИРОВАТЬ (Поскольку вы упоминаете, что используете OS X, я удалил часть, рассказывающую о GNU Sed)

С помощьюверсия набора, встроенная в OS X, \0\n означает «0n» (ноль символа и символ n).

Вы заменяете каждый символ в своем вводе, поэтому вы не должны удивляться, что выне видеть их в выводе.

...