是否有一个标准的方式做到一fopen用unicode string文件的路径?

有帮助吗?

解决方案

在*尼克斯,你只需使用的标准fopen(见的更多信息在答复TokeMacGuy,或在这 论坛) 在窗户,可以使用_wfopen,然后通过一unicode string(更多的信息,请参阅 MSDN).

因为没有真正的共同方式,我会把这个呼吁在宏观一起,与所有其他系统相关的职能。

其他提示

没有,没有标准的方式。有操作系统之间的一些差异。这里的操作系统如何处理不同的非ASCII文件名。

的Linux

在Linux下,文件名是一个简单的二进制字符串。在大多数现代发行的惯例是使用UTF-8非ASCII文件名。但在最初,它是常见的编码文件名的ISO-8559-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位兼容的),并将其转换内部。

在视窗API使用UTF-16进行的文件名,但fopen仅支持ASCII。许多C库函数有一个不接受(在Windows wchar_t)UTF-16非标准等同。例如, _wfopen 代替fopen

这是当前语言环境的问题。我的系统,它支持Unicode上,文件路径将是unicode的。我能够由区域设置命令的手段,以检测这样的:

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"

文件路径编码通常设定全系统的,所以如果你的文件路径是不是在系统的语言环境,则需要通过的的iconv 库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top