如何确定终端是否支持UTF-8


21

我正在CentO 5上为perl设置CPAN模块,问题之一是“您的终端是否支持UTF-8?” (释义)。我如何找到?

Answers:


15

确实,测试的surefire方法是下载文本文件并将其放在终端中,看看一切是否正常。

或者,如果可以的话,重新编译启用unicode选项的终端(假设它有一个)。

$ TERM和$ LANG是什么样的?


$ TERM是“ xterm” $ LANG是“ en_US.UTF-8”(aha!)文本文件在终端中很好地显示,但是奇怪的是,在Firefox中却没有。
2009年

是的,我实际上遇到了同样的事情:-/ ...当我尝试那里的建议时,我得到了问号
theman_on_osx

$ LANG只是告诉您在写入stdout / stderr时系统将使用什么。它没有说明终端的功能。但是,如果您的系统打印的所有奇怪字符看起来都不错,则您的终端可能支持UTF-8。
Epcylon

2
甚至可以通过显示一些文本并检查其宽度(通过读取前后的光标位置)来实现自动化。我发布了概念证明和其他建议。
吉尔(Gilles)'所以

@Gilles,您的答案非常简单。爱它!

20

在您的终端中输入:

echo -e '\xe2\x82\xac' 

如果您的终端支持UTF-8,它将输出欧元符号:


并非所有字体都带有欧元符号,因此建议使用不同的测试代码点。
迈克尔·汉普顿

5

最简单的方法:运行以下命令并检查输出。如果终端显示UTF-8,将带有抑扬符的大写字母O。

perl -le 'print "\x{c3}\x{94}"'

我很确定我的终端现在支持UTF-8(通过了theman_on_osx建议的测试),但这只会输出空白行。这是怎么回事?
2009年

也许您在终端应用程序中使用的字体不支持UTF-8字符。
09年

4
我知道现在已经很晚了,但是UTF-8 Out标记使它工作起来更好perl -CO -le 'print "\x{d4}"'
Ashley

3
或不-CO选项,给Perl的正确的UTF-8字节:$ perl的-le '打印“\ X {C3} \ {X} 94”' O
蒂姆·

2

最确定的方法是使用“ locale”命令。它将打印出所有各种变量,这些变量指示要使用的字符集。例如,这是我在RHEL5.3上的输出,默认设置为仅使用UTF-8。

LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

1
这不会测试终端,而只会测试语言环境设置(实际上并非始终由终端仿真器设置,它可能无法反映终端的当前状态,或者可能已被某些用户配置覆盖)。
吉尔(Gilles)'所以

1

您可以只使用以下命令:

locale charmap

1
这不会测试终端。它仅显示语言环境设置。
grawity 2013年

1
curl http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

要么

wget -O - http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

这显然需要wgetcurl


-1
UTF=$(echo -e "\u263A")
if [[ ! "$UTF" =~ "A" ]]  ; then
 echo -n "UNICODE here!"
fi

2
这不会测试终端。它仅测试echo内置功能是否支持\u
grawity 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.