有没有一种标准的方法来使用 Unicode 字符串文件路径执行 fopen
?
最佳答案
不,没有标准方法。操作系统之间存在一些差异。以下是不同操作系统处理非 ASCII 文件名的方式。
Linux
在 Linux 下,文件名只是一个二进制字符串。大多数现代发行版的约定是对非 ASCII 文件名使用 UTF-8。但在一开始,将文件名编码为 ISO-8859-1 是很常见的。基本上由每个应用程序来选择编码,因此您甚至可以在同一个文件系统上使用不同的编码。 LANG
环境变量可以提示您首选的编码是什么。但是现在,您可能到处都可以假设 UTF-8。
不过,这并非没有问题,因为包含无效 UTF-8 序列的文件名在大多数 Linux 文件系统上完全有效。如果您只支持 UTF-8,您将如何指定这样的文件名?理想情况下,您应该同时支持 UTF-8 和二进制文件名。
OS X
OS X 上的 HFS 文件系统在内部使用 Unicode (UTF-16) 文件名。大多数 C(和 POSIX)库函数,如 fopen
接受 UTF-8 字符串(因为它们是 8 位兼容的)并在内部进行转换。
Windows
Windows API 使用 UTF-16 作为文件名,但 fopen
使用当前代码页,不管是什么(UTF-8 刚刚成为一个选项)。许多 C 库函数都有接受 UTF-16 的非标准等效函数(Windows 上为 wchar_t
)。例如,_wfopen
而不是 fopen
.
关于c - 有没有一种标准的方法来使用 Unicode 字符串文件路径进行 fopen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/396567/