Jared Smith Asked: 2021-09-05 11:33:20 +0800 CST2021-09-05 11:33:20 +0800 CST 2021-09-05 11:33:20 +0800 CST 文件路径可以是无效的 UTF-8 吗? 772 标题说明了一切:如果我有文件路径的字节并且我尝试将它们解码为 UTF-8,操作是否可能会失败(即有效的 unix 文件路径的字节可能是无效的 UTF-8)? filenames unicode 2 个回答 Voted ktf 2021-09-07T02:45:58+08:002021-09-07T02:45:58+08:00 除了 Artem S. Tashkinov 的回答: 偶然发现文件名中无效的 UTF-8 序列的一个常见原因是:它们是在不同的语言环境设置下创建的。是的:发现仍在使用 ISO-8859 字符集编码运行的系统并不罕见。更不用说世界各地的 PC 和 MAC 上使用的无数不同的字符集...... 以下示例显示了同一目录中具有相同名称Überraschung(德语为惊奇)的两个文件。一个文件是用 创建的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' 提示:要在字符集之间正确切换,您必须更改以下两个设置: LANGUNIX/Linux shell中环境变量的设置。它控制 UNIX 系统如何解释和处理字符。 终端仿真的字符编码(例如gnome-term或putty)。这控制了字符在屏幕上的显示方式。 Best Answer Artem S. Tashkinov 2021-09-05T11:46:12+08:002021-09-05T11:46:12+08:00 是的,完美。本机 Linux 文件系统的文件路径/名称可以包含除NULL和之外的任何二进制数据/。 touch "$(dd if=/dev/urandom bs=128 count=1)" 会带你到那里。该命令可能会失败,因为它不会清理任何东西 - 您可能需要多次运行它才能获得良好的效果。
除了 Artem S. Tashkinov 的回答:
偶然发现文件名中无效的 UTF-8 序列的一个常见原因是:它们是在不同的语言环境设置下创建的。是的:发现仍在使用 ISO-8859 字符集编码运行的系统并不罕见。更不用说世界各地的 PC 和 MAC 上使用的无数不同的字符集......
以下示例显示了同一目录中具有相同名称Überraschung(德语为惊奇)的两个文件。一个文件是用 创建的
LANG=en_us.UTF-8
,另一个是用LANG=en_US.ISO-8859-15
:使用 UTF-8 编码列出时:
当使用 ISO-8859-15 编码列出时:
提示:要在字符集之间正确切换,您必须更改以下两个设置:
LANG
UNIX/Linux shell中环境变量的设置。它控制 UNIX 系统如何解释和处理字符。是的,完美。本机 Linux 文件系统的文件路径/名称可以包含除
NULL
和之外的任何二进制数据/
。会带你到那里。该命令可能会失败,因为它不会清理任何东西 - 您可能需要多次运行它才能获得良好的效果。