文件路径可以是无效的 UTF-8 吗?

文件路径可以是无效的 UTF-8 吗?

标题说明了一切:如果我有文件路径的字节,并且尝试将它们解码为 UTF-8,操作是否可能会失败(即有效的 unix 文件路径的字节可能是无效的 UTF-8)?

答案1

除了 Artem S. Tashkinov 的回答之外:

偶然发现文件名中无效 UTF-8 序列的一个常见原因:它们是在不同的区域设置下创建的。是的:仍然使用 ISO-8859 字符集编码运行的系统并不罕见。更不用说世界各地的 PC 和 MAC 上使用的无数不同的字符集......

以下示例显示两个同名文件超然性(德语为惊喜)在同一目录中。一个文件是用LANG=en_us.UTF-8,另一个是用LANG=en_US.ISO-8859-15

当使用 UTF-8 编码列出时:

    $ ls -lt
    total 0
    -rw-r--r-- 1 ktf ktf 0 Sep  6 12:01 ''$'\334''berraschung'
    -rw-r--r-- 1 ktf ktf 0 Sep  6 12:00  Überraschung

当使用 ISO-8859-15 编码列出时:

    $ ls -lt
    total 0
    -rw-r--r-- 1 ktf ktf 0 Sep  6 12:01  Überraschung
    -rw-r--r-- 1 ktf ktf 0 Sep  6 12:00 'Ã'$'\234''berraschung'

暗示:要正确地在字符集之间切换,您必须更改两个都以下设置:

  1. LANGUNIX/Linux shell 中环境变量的设置。它控制 UNIX 系统如何解释和处理字符。
  2. 终端仿真的字符编码(例如侏儒术语或者油灰)。它控制字符在屏幕上的显示方式。

答案2

是的,完美。本机 Linux 文件系统的文件路径/名称可以包含除 和 之外的任何二进制NULL数据/

touch "$(dd if=/dev/urandom bs=128 count=1)"

会带你到达那里。该命令可能会失败,因为它不会清理任何内容 - 您可能需要运行它多次才能获得良好的效果。

相关内容