标题说明了一切:如果我有文件路径的字节,并且尝试将它们解码为 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'
暗示:要正确地在字符集之间切换,您必须更改两个都以下设置:
LANG
UNIX/Linux shell 中环境变量的设置。它控制 UNIX 系统如何解释和处理字符。- 终端仿真的字符编码(例如侏儒术语或者油灰)。它控制字符在屏幕上的显示方式。
答案2
是的,完美。本机 Linux 文件系统的文件路径/名称可以包含除 和 之外的任何二进制NULL
数据/
。
touch "$(dd if=/dev/urandom bs=128 count=1)"
会带你到达那里。该命令可能会失败,因为它不会清理任何内容 - 您可能需要运行它多次才能获得良好的效果。