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

Jar*_*ith 1 filenames unicode

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

ktf*_*ktf 5

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

\n

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

\n

以下示例显示同一目录中两个具有相同名称\xc3\x9cberraschung(德语为惊讶)的文件。一个文件是使用 创建的LANG=en_us.UTF-8,另一个文件是使用LANG=en_US.ISO-8859-15

\n

当使用 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

提示:要在字符集之间正确切换,您必须更改两者设置:

\n
    \n
  1. 环境变量的设置LANGUNIX/Linux shell 中它控制 UNIX 系统如何解释和处理字符。
  2. \n
  3. 终端仿真的字符编码(例如gnome-termputty)。它控制字符在屏幕上的显示方式。
  4. \n
\n