当我在控制台中执行“tree”命令时,这就是我得到的:
.
├── Annexe\ 1\ -\ Sch\303\251ma\ global\ de\ la\ base\ de\ donn\303\251es.raw
...
结果由 utf-8 序列组成,我需要以人类可读的形式获取报告的字符串。我怎样才能改变这个讨厌的东西?
答案1
您可以指定您希望它与--charset
开关一起使用的任何字符集。
--charset charset
Set the character set to use when outputting HTML and for line
drawing.
还有这 2 个开关可能会有所帮助:
-q Print non-printable characters in filenames as question marks
instead of the default.
-N Print non-printable characters as is instead of as escaped octal
numbers.
您还可以使用这些开关来增强输出:
-A Turn on ANSI line graphics hack when printing the indentation
lines.
-S Turn on ASCII line graphics (useful when using Linux console mode
fonts). This option is now equivalent to `--charset=IBM437' and
may eventually be depreciated.
答案2
我可以通过以下方式获得输出:
LC_ALL=C tree -A
您会看到\303\251
是否tree
认为 0303 和 0251 不是有效字符(或您所在区域中的字符序列)。
但是,这在 UTF-8 语言环境中有效,其中\303\251
isé
和 iso-8859-1 或 iso-8859-15(法语国家/地区常见的两个常见的单字节每个字符字符集),其中\303
isÃ
和\251
is ©
。
因此,这里表明您所处的语言环境中仅为前 128 个字节值定义了字符集,例如 ASCII,就像 C 语言环境中一样。
您可以知道tree
您的字符集是 UTF-8 或 iso-8859-15,然后它不会将这些 0303 字节转换为 \303
.
locale -a
会告诉您系统上是否有使用 UTF-8 字符集的区域设置。然后你可以选择一个像fr_FR.UTF-8
:
LC_ALL=fr_FR.UTF-8 tree
但是,它是否会正确显示将取决于您的终端仿真器的理解。如果未将其配置为显示 UTF-8 字符,则它将无法工作。
如果您的终端模拟器能够显示 iso-8859-1,您可以使tree
显示 UTF-8 并使用以下命令进行转换iconv
:
LC_ALL=fr_FR.UTF-8 tree | iconv -f UTF-8