10

当文件名是“Unicode”文件名时,我需要以 std::fstream(或实际上任何其他 std::ostream)的形式打开文件。

在 MSVC 下我有非标准扩展std::fstream::open(wchar_t const *,...)?我可以用 GCC(最重要的)和可能的 Borland 编译器等其他编译器做什么。

我知道 CRTL 提供了_wfopen但它提供了 CFILE *接口而不是 io-streams,也许有一种非标准的方式来创建 io-stream FILE *?是否有任何boost::ifstream类似 MSVC 的 Windows 扩展?

4

3 回答 3

7

不幸的是,没有标准的方法可以做到这一点,尽管 C++0x (1x?) 承诺这样做。在那之前,您正确地假设可以在 Boost 中找到解决方案,但是,您正在搜索的库是Boost.Filesystem

Boost.Filesystem 内部默认使用宽字符串作为其通用路径系统,因此在这方面不存在 unicode 问题。

于 2010-02-23T09:23:11.550 回答
3

目前没有简单的解决方案。

您需要创建自己的流缓冲区,以便_wfopen在后台使用。例如,您可以为此使用boost::iostream

于 2011-06-19T06:29:04.143 回答
-3

使用类似或的东西将 Unicode 文件名转换为char*字符串(这使您可以更好地控制所涉及的代码页)。wcstombs()WideCharToMultiByte()

然后使用转换后的文件名打开文件。

于 2010-02-23T09:17:55.320 回答