由于没有人给出足够好的答案,我会重新制定它:
我如何知道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
在脚本中是否有任何方法可以知道字符是否正确显示(如果是这样我可以实现一些后备),或者如果我们可以设置终端显示它。
答案 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。
最后但并非最不重要的是,您可以使用tconv
,ttyconv
或luit
等工具来转换为&amp;来自UTF-8。
请参阅: