如何用unicode文件名打开std :: fstream(ofstream或ifstream)?

你不会想象使用Windows应用程序的C ++标准库打开一个文件是非常基本的,但似乎是这样。 在这里Unicode是指UTF-8,但是我可以转换为UTF-16或其他任何东西,重点是从Unicode文件名中获取一个ofstream实例。 在我开发自己的解决方案之前,有没有一个首选路线? 尤其是跨平台的?


C ++标准库不支持Unicode。 charwchar_t不需要是Unicode编码。

在Windows上, wchar_t是UTF-16,但标准库中没有直接支持UTF-8文件名( char数据类型在Windows上不是Unicode)

使用MSVC(以及Microsoft STL),提供了filestreams的构造函数,该构造函数接受const wchar_t*文件名,允许您创建流:

wchar_t const name[] = L"filename.txt";
std::fstream file(name);

但是,这个重载不是由C ++ 11标准规定的(它只能保证基于char的版本的存在)。 对于MinGW(-w64)的gcc的libstdc ++等替代STL实现也不存在,如版本g ++ 4.8.x.

请注意,就像Windows上的char不是UTF8,在其他OS上wchar_t可能不是UTF16。 总的来说,这不太可能是便携式的。 打开给定wchar_t文件名的流没有根据标准定义,并且在char指定文件名可能很困难,因为char使用的编码在不同OS之间有所不同。


当前版本的Visual C ++ std :: basic_fstream有一个open()方法,它根据http://msdn.microsoft.com/en-us/library/4dx08bh4.aspx采用wchar_t *。


使用std::wofstreamstd::wifstreamstd::wfstream 。 他们接受unicode文件名。 文件名必须是wstringwchar_t的数组,或者必须在文本之前有_T()宏或前缀L

链接地址: http://www.djcxy.com/p/54635.html

上一篇: How to open an std::fstream (ofstream or ifstream) with a unicode filename?

下一篇: platform audio library for synchronizing audio playback