如何知道位图字体上是否有字符?

时间:2010-10-30 22:59:55

标签: bash scripting special-characters

更新

由于没有人给出足够好的答案,我会重新制定它:

我如何知道Linux中的shell脚本中是否支持给定unicode字符的当前位图字体

就是这样:不是在gnome-terminal内有它的花哨的TTF支持和不同的字符集:没有X.org的普通金属tty

旧问题(可以清除上述句子中的内容)

我正在编写一个包含特殊字符的程序。 字符如וואבדג(希伯来语)。

使用一些Ubuntu我在这里得到了方便,我可以让他们在X环境中工作(在gnome-terminal内)。在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”。

在没有X.Org开始的tty中,它只显示一颗钻石。

在所有条款中,我都有

LANG=es_ES.UTF-8

在脚本中是否有任何方法可以知道字符是否正确显示(如果是这样我可以实现一些后备),或者如果我们可以设置终端显示它。

3 个答案:

答案 0 :(得分:1)

你有一个错误:

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

编辑(因为你提到你是在OS X上我删除了谈论GNU Sed的部分)

使用OS X内置的set版本,\0\n表示“0n”(字符零和字符n)。

您正在替换输入中的每个字符,因此您不应该对未在输出中查看它们感到惊讶。

答案 1 :(得分:1)

在Mac OS X上,您可以查看Terminal.app以获取UTF-8准备情况:

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

此外,Mac OS X使用不接受\0的FreeBSD sed。

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

答案 2 :(得分:1)

您至少可以检查当前的终端仿真器编码是否设置为处理UTF-8字符。如果是这种情况,您当前的位图字体也应该支持UTF-8编码字符。

LC_ALL= locale charmap  # UTF-8

$TERM环境变量的值也可以提示您当前的终端是否能够处理UTF-8字符,例如: G。 rxvt vs urxvt。

最后但并非最不重要的是,您可以使用tconvttyconvluit等工具来转换为&amp;来自UTF-8。

请参阅: