标题说明了一切:如果我有文件路径的字节,并且尝试将它们解码为 UTF-8,操作是否可能会失败(即有效的 unix 文件路径的字节可能是无效的 UTF-8)?
除了 Artem S. Tashkinov 的回答之外:
\n偶然发现文件名中无效 UTF-8 序列的一个常见原因:它们是在不同的区域设置下创建的。是的:仍然使用 ISO-8859 字符集编码运行的系统并不罕见。更不用说世界各地的 PC 和 MAC 上使用的无数不同的字符集......
\n以下示例显示同一目录中两个具有相同名称\xc3\x9cberraschung(德语为惊讶)的文件。一个文件是使用 创建的LANG=en_us.UTF-8
,另一个文件是使用LANG=en_US.ISO-8859-15
:
当使用 UTF-8 编码列出时:
\n $ ls -lt\n total 0\n -rw-r--r-- 1 ktf ktf 0 Sep 6 12:01 ''$'\\334''berraschung'\n -rw-r--r-- 1 ktf ktf 0 Sep 6 12:00 \xc3\x9cberraschung\n
Run Code Online (Sandbox Code Playgroud)\n当使用 ISO-8859-15 编码列出时:
\n $ ls -lt\n total 0\n -rw-r--r-- 1 ktf ktf 0 Sep 6 12:01 \xc3\x9cberraschung\n -rw-r--r-- 1 ktf ktf 0 Sep 6 12:00 '\xc3\x83'$'\\234''berraschung'\n
Run Code Online (Sandbox Code Playgroud)\n提示:要在字符集之间正确切换,您必须更改两者设置:
\nLANG
UNIX/Linux shell 中它控制 UNIX 系统如何解释和处理字符。