c - 有没有一种标准的方法来使用 Unicode 字符串文件路径进行 fopen?

标签 c unicode fopen

有没有一种标准的方法来使用 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/

相关文章:

C 硬编码数组作为 memcpy 参数

c# - 是否有任何日语 TTS 语音可与 C# SpeechSynthesizer 一起使用

python - 将unicode字符串拆分为单词

c++ - 在unicode c++中编码路径

c - 我的错误是什么?

c - 如何从特定区域分配内存

C程序逻辑实现

c - 如何在 C 的正弦函数中输入大于 122.409 的角度

c++ - fopen 非 ASCII 字符错误

c - 搜索和替换文本