当文件名是“Unicode”文件名时,我需要打开一个文件作为std :: fstream(或实际上任何其他std :: ostream)。
在MSVC下,我有非标准扩展std::fstream::open(wchar_t const *,...)
? 我可以用其他编译器如GCC(最重要的)和Borland编译器做些什么。
我知道CRTL提供了_wfopen
但它提供了C FILE *
接口而不是io-streams,也许有一个非标准的方式来从FILE *
创buildio-stream? 是否有任何boost::ifstream
MSVC扩展为Windows?
不幸的是,虽然C ++ 0x(1x)允诺做到这一点,但没有标准的方法来做到这一点。 在此之前,您正确地认为可以在Boost中找到解决方案,但是您要搜索的库是Boost.Filesystem 。
Boost.Filesystem在其内部通用路径系统默认使用宽字符串,所以在这方面没有unicode问题。
目前没有简单的解决方案。
你需要创建你自己的流缓冲区,在_wfopen
使用_wfopen
。 你可以使用这个例如boost::iostream
使用类似wcstombs()
或WideCharToMultiByte()
将Unicode文件名转换为char*
字符串(这使您可以更好地控制所涉及的代码页)。
然后使用转换后的文件名来打开文件。