Linux文件系统中的字符集

Linux文件系统中的字符集

我刚刚安装了一些 Arch Linux 软件包,它们将此文件转储到我的磁盘上:

/etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem

请注意,文件名似乎包含土耳其语字符。以下是不同的命令及其输出:

> cd /etc/ssl/certs
> echo EBG*
EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem
> ls -al EBG*
lrwxrwxrwx 1 root root 86 Nov  3 22:27 EBG_Elektronik_Sertifika_Hizmet_Sa??lay??c??s??.pem -> /usr/share/ca-certificates/mozilla/EBG_Elektronik_Sertifika_Hizmet_Sa??lay??c??s??.crt

Q1:为什么echols产生不同的输出?

所以它是一个符号链接。如果我取消引用它:

> ls -alL EBG*
-rw-r--r-- 1 root root 2106 Sep 24 22:52 EBG_Elektronik_Sertifika_Hizmet_Sa??lay??c??s??.pem

我们来看看目标:

> cd /usr/share/ca-certificates/mozilla
> echo EBG*
EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt
> ls -al EBG*
-rw-r--r-- 1 root root 2106 Sep 24 22:52 EBG_Elektronik_Sertifika_Hizmet_Sa??lay??c??s??.crt

问题 2:Linux 文件系统(此处为 ext4)中非 ASCII 字符的编码是什么?我说得对吗?编码在任何地方都没有被捕获,如果我给你一些随机硬盘而没有说明,你需要猜一下我使用了哪种编码?

我注意到存在一个问题,因为pacman(Arch Linux 包管理器)似乎对它是否安装了该文件感到困惑:

问题 3:我如何防止pacman、 或ls或其他任何内容对此类文件产生混淆?如果下周某个文件是阿拉伯语或希伯来语而不是土耳其语怎么办?

答案1

  1. echo是一个愚蠢的程序,无论它认为输出是否有意义,它都会产生输出。ls是一个聪明的程序,它试图只输出在上下文中有意义的内容。这会导致ls产生“错误”的输出,因为您没有正确设置语言环境。如果您export LANG=en_US.UTF-8(或其他使用 utf-8 的语言)那么ls它将正确显示;通常有一些系统环境脚本可以做到这一点。

  2. Linux 文件系统不强制使用编码(但外部安装的文件系统可能会执行编码转换,例如从 cp1252 转换为 FAT),但严格按照惯例始终使用 utf-8。过去几年,如果软件包中使用任何其他编码,则被视为严重错误。

  3. 对于ls,请修复您的环境。对于pacman,请提交错误。

相关内容