是否有一个标准的方式做到一fopen用unicode string文件的路径?
题
是否有一个标准的方式做到一fopen用unicode string文件的路径?
其他提示
没有,没有标准的方式。有操作系统之间的一些差异。这里的操作系统如何处理不同的非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 库。
不隶属于 StackOverflow