控制台中的 utf-8 序列

控制台中的 utf-8 序列

当我在控制台中执行“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\251isé和 iso-8859-1 或 iso-8859-15(法语国家/地区常见的两个常见的单字节每个字符字符集),其中\303isÃ\251is ©

因此,这里表明您所处的语言环境中仅为前 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

相关内容