如何使'less'命令处理UTF-8?

在我的Macterminal上,打印UTF-8的工作原理一般,但less不能正常工作。

所以这工作正常:

 $ echo -e '\xe2\x82\xac' € 

但是把它变成更小的东西就是这样的:

 $ echo -e '\xe2\x82\xac' | less <E2><82><AC> 

这怎么解决?

诊断:

我正在使用Mac OS 10.6.8。 less版本418,terminal2.1.2(273.1)。

我的语言环境的输出是这样的:

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

好的,我在googlesearch后find了答案。 显然, LESSCHARSET需要像这样设置:

 export LESSCHARSET=utf-8 

现在less适合我的工作。

如果可以看到一些unicode字符less ,但无法less显示表情符号,请尝试升级到更新的版本。 在Mac OS X上,我从版本458到481,并解决了我的问题(例如, git log现在可以在提交消息中显示表情符号)。

如果你有自制软件,可以通过运行brew install homebrew/dupes/less来更换新版本。

为我工作

 LANG= 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="en_US.UTF-8" 

我GOOGLE了这一点,并尝试了以下环境variables为我工作:

 export LC_ALL=en_US.UTF-8 export LANG=en_us.UTF-8 

看到我在多个不同的答案findLC_ALL我认为这是正确的。 但也许不是唯一正确的答案,当然这个问题当然可以有更正确的答案。

无论如何,一些更多的使用googling给了我这个variables的描述:

LC_ALL此variables确定所有语言环境类别的值。 LC_ALL环境variables的值优先于以LC_(LC_COLLATE,LC_CTYPE,LC_MESSAGES,LC_MONETARY,LC_NUMERIC,LC_TIME)和LANG环境variables开头的任何其他环境variables。

来源: http : //pubs.opengroup.org/onlinepubs/007908799/xbd/envvar.html

引导我认为这是语言variables来统治他们所有:)