【发布时间】:2016-12-21 05:58:47
【问题描述】:
我了解 Linux 文件系统将文件名存储为字节序列,这意味着与 Unicode 编码无关。
但是,UTF-8 或增强型 UTF-8 以外的编码很可能使用 0 字节作为可出现在文件名中的 Unicode 字符的多字节表示的一部分。在 Linux 文件系统 C 代码中的任何地方,您都以 0 字节终止字符串。那么Linux文件系统是如何支持Unicode的呢?它是否假设所有创建文件名的应用程序都只使用 UTF-8?但这不是真的,是吗?
同样,shell(例如 bash)在模式中使用 * 来匹配任意数量的文件名字符。我可以在 shell C 代码中看到它只是使用* 的 ASCII 字节并逐字节地分隔匹配。适合 UTF-8 编码的名称,因为它的属性是,如果您采用字符串的字节表示,则从开头匹配一些字节与 *,然后将其余的与另一个字符串匹配,然后是开头的字节实际上匹配一串完整的字符,而不仅仅是字节。
但其他编码不具有该属性,是吗?再说一遍,shell 是否假定 UTF-8?
【问题讨论】:
-
我和 Google 都没有听说过“增强的 UTF-8”,它是什么?
-
@zwol 抱歉,应该是“修改后的 UTF-8”。
-
...我也不知道那会是什么?
-
@zwol modified UTF-8 与 UTF-8 的区别在于 null 字符的编码方式 - 在 modified 中,它不是零字节,而是一个特定的两字节序列,这样,您可以有以零字节结尾的字符串。