UTF 8 文件名?

UTF 8 文件名?

在基于 Unix 的操作系统中允许使用 UTF-8 文件名吗?如果是这样,我是否需要执行任何特殊操作才能将文件写入磁盘?

让我解释一下我希望做什么。我正在编写一个应用程序,该应用程序将通过 FTP 将文件传输到远程系统,但文件名是通过某些可能采用 UTF-8 格式的元数据集动态设置的。我想知道是否需要做一些事情才能将文件写入 Unix/Linux 中的磁盘。

另外作为后续,有谁知道如果我将 UTF-8 文件名上传到不支持 UTF-8 的系统会发生什么?

答案1

在 Unix/Linux 上,文件名是除斜杠或 NUL 之外的任何字节序列。斜杠分隔路径组件,NUL 终止路径名。

因此,您可以使用任何您想要的文件名编码。如果某些应用程序对文件名中可能包含哪些字符一无所知,则它们可能会在某些编码方面遇到问题 - 例如,写得不好的 shell 脚本通常不处理带有空格的文件名。

现代 Unix/Linux 环境可以很好地处理 UTF-8 编码的文件名。

答案2

在内部,大多数文件系统存储字节:文件系统驱动程序不关心字节的含义。 Linux 和大多数其他现代 unice 上的通用文件系统驱动程序允许除/空字节之外的任何字节出现在文件名中。

有些文件系统可能具有编码限制——通常是非本机文件系统,例如 FAT 或 NTFS。某些网络文件系统(例如 Samba)可以在服务器编码和客户端编码之间进行转换;您需要确保服务器和客户端配置一致。

按照惯例,在大多数系统上,组成文件名的字节被解释为 UTF-8。如果您运行的应用程序将文件名解释为字符,例如通过 FTP 传输名称的应用程序,您可能需要配置此应用程序以告诉它您的文件名采用 UTF-8 编码。对于许多命令行应用程序来说,将环境设置LC_CTYPE为 UTF-8 区域设置可以解决这个问题。en_US.UTF-8

如果您将文件存储在不支持 UTF-8 的系统上,也没有关系。字节将保持不变。您将无法显示组成文件名的字符,但如果将文件复制回支持 UTF-8 的系统,这些相同的字节仍将显示为 UTF-8 字符。

如果您正在编写自己的应用程序,那么在内部使用 UTF-8 并尽可能用于存储和传输是一个好主意。

相关内容