Mar*_*k D 19 linux filenames unicode
在基于 unix 的操作系统中是否允许使用 utf6 文件名?如果是这样,我需要做任何特殊的事情来将文件写入磁盘。
让我解释一下我希望做什么。我正在编写一个应用程序,它将通过 ftp 将文件传输到远程系统,但文件名是通过一些可能在 utf8 中的元数据集动态设置的。我想知道是否需要做些什么才能将文件写入 unix/linux 中的磁盘。
另外作为后续,有人知道如果我将 utf 8 文件名上传到不支持 utf8 的系统会发生什么吗?
cam*_*amh 23
在 Unix/Linux 上,文件名是除斜杠或 NUL 之外的任何字节序列。斜线分隔路径组件,NUL 终止路径名。
因此,您可以对文件名使用任何您想要的编码。如果某些应用程序对文件名中可能包含哪些字符一无所知,则它们可能会在某些编码上遇到问题 - 例如,编写不当的 shell 脚本通常不处理带有空格的文件名。
现代 Unix/Linux 环境可以很好地处理 UTF-8 编码的文件名。
Gil*_*il' 14
在内部,大多数文件系统存储字节:文件系统驱动程序不关心字节的含义。Linux 和大多数其他现代 unice 上的通用文件系统驱动程序允许除/空字节之外的任何字节出现在文件名中。
有些文件系统可能有编码限制——通常是非本地文件系统,如 FAT 或 NTFS。某些网络文件系统(例如 Samba)可能会在服务器编码和客户端编码之间进行转换;您需要确保服务器和客户端配置一致。
通常,在大多数系统上,组成文件名的字节被解释为 UTF-8。如果您运行将文件名解释为字符的应用程序,例如通过 FTP 传输名称的应用程序,您可能需要配置此应用程序以告诉它您的文件名以 UTF-8 编码。LC_CTYPE像en_US.UTF-8许多命令行应用程序一样,将环境设置为 UTF-8 语言环境。
如果您将文件存储在不支持 UTF-8 的系统上,则没有关系。字节将保持不变。您将无法显示组成文件名的字符,但如果您将文件复制回支持 UTF-8 的系统,这些相同的字节仍将显示为 UTF-8 字符。
如果您正在编写自己的应用程序,在内部使用 UTF-8 并尽可能用于存储和传输是一个好主意。