我正在尝试查看UTF-8文本文件/流less
,即使我像这样调用它:
cat file | LESSCHARSET=utf-8 less
非ASCII兼容的UTF-8字符无法正确显示.相反,它们的十六进制值在括号中突出显示,例如
.
使用UTF-8编码在vim中读取相同的文本不会产生任何问题.所以我在想我调用的方式有问题less
.
我的locale
输出如下
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=
我的较少版本是XCode在OSX Leopard上安装的版本:
$ less --version | sed 's/^/ /' less 394 Copyright (C) 1984-2005 Mark Nudelman less comes with NO WARRANTY, to the extent permitted by law. For information about the terms of redistribution, see the file named README in the less distribution. Homepage: http://www.greenwoodsoftware.com/less
locale -a | grep US | sed 's/^/ /'
输出以下内容:
en_AU.US-ASCII en_CA.US-ASCII en_GB.US-ASCII en_NZ.US-ASCII en_US en_US.ISO8859-1 en_US.ISO8859-15 en_US.US-ASCII en_US.UTF-8
Teddy.. 8
什么是locale
命令的输出?它是UTF-8语言环境吗?
你确定你的终端设置为显示UTF-8吗?是否echo -e '\xe2\x82\xac'
产生欧元(欧元)标志?
您设置的区域设置是否已安装在系统上?它是否存在于locale -a
输出列表中?
less
你用的是什么版本的?(运行less --version
以找出答案.)
真的,真正的旧版本甚至不支持LESSCHARSET
.这不太可能是这种情况,因为我有一个less
版本为382 的Debian"sarge"系统,
如果正确设置了语言环境,它甚至不需要LESSCHARSET.
@dan只是为了检查,`echo -e'\ xe2\x82\xac'`打印欧元符号,但`echo -e'\ xe2\x82\xac'| 少打印盒子? (5认同)
实际上,`echo -e'\ xe2\x82\xac'| less`工作正常,并显示一个欧元符号.这帮我弄清了部分问题.我正在测试的文件实际上是用latin-1编码的,我错误地查看了Vim`编码`值而不是Vim`fileencoding`值来确定它的编码.做'LESSCHARSET = latin1 less file`现在显示`?`diamonds字符应该是的钻石.我猜应该是这样的? (2认同)
小智.. 5
我的猜测是你的文件不是UTF8而是ISO8859.(
用LANG=en_US.ISO-8859-1 xterm
.启动xterm .然后验证语言环境(输出locale
应该类似于en_US.ISO-8859-1).然后使用less来查看文件.它显示正确吗?
请注意,仅在LESSCHARSET=iso8859
不启动新终端的情况下使用是不够的. LESSCHARSET
告诉我们终端可以解释iso8859,但是你的终端可能会显示UTF8,因为欧元符号显示正确.但由于\ xf4不是有效的utf8字符,终端可能会显示类似" "的内容.
什么是locale
命令的输出?它是UTF-8语言环境吗?
你确定你的终端设置为显示UTF-8吗?是否echo -e '\xe2\x82\xac'
产生欧元(欧元)标志?
您设置的区域设置是否已安装在系统上?它是否存在于locale -a
输出列表中?
less
你用的是什么版本的?(运行less --version
以找出答案.)
真的,真正的旧版本甚至不支持LESSCHARSET
.这不太可能是这种情况,因为我有一个less
版本为382 的Debian"sarge"系统,
如果正确设置了语言环境,它甚至不需要LESSCHARSET.
我的猜测是你的文件不是UTF8而是ISO8859.(
用LANG=en_US.ISO-8859-1 xterm
.启动xterm .然后验证语言环境(输出locale
应该类似于en_US.ISO-8859-1).然后使用less来查看文件.它显示正确吗?
请注意,仅在LESSCHARSET=iso8859
不启动新终端的情况下使用是不够的. LESSCHARSET
告诉我们终端可以解释iso8859,但是你的终端可能会显示UTF8,因为欧元符号显示正确.但由于\ xf4不是有效的utf8字符,终端可能会显示类似" "的内容.