UTF 8文件名?


15

在基于UNIX的操作系统中,是否允许utf6文件名?如果是这样,我需要做一些特殊的事情来将文件写入磁盘。

让我解释一下我希望做什么。我正在编写一个应用程序,该应用程序将通过ftp将文件传输到远程系统,但文件名是通过某些可能位于utf8中的元数据集动态设置的。我想知道是否需要做一些操作以将文件写入Unix / Linux中的磁盘。

另外,作为后续行动,是否有人知道将ut​​f 8文件名上传到不支持utf8的系统会发生什么情况?

Answers:


20

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

因此,您可以为文件名使用所需的任何编码。如果某些应用程序不了解文件名中可能包含的字符,则某些应用程序可能会遇到麻烦-例如,编写不佳的Shell脚本通常不处理带空格的文件名。

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


12

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

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

常规上,在大多数系统上,组成文件名的字节被解释为UTF-8。如果运行将文件名解释为字符的应用程序(例如,通过FTP传输名称的应用程序),则可能需要配置此应用程序以告知它您的文件名使用UTF-8编码。将环境设置LC_CTYPE为UTF-8语言环境就像en_US.UTF-8许多命令行应用程序一样。

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

如果您要编写自己的应用程序,则最好在内部使用UTF-8,并尽可能使用它进行存储和传输。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.