【问题标题】:c++ UTF-16 ofstream file creation Windows [duplicate]c ++ UTF-16 ofstream文件创建Windows [重复]
【发布时间】:2013-01-04 22:44:18
【问题描述】:

可能重复:
How to open an std::fstream (ofstream or ifstream) with a unicode filename?

我有一个 UTF-16 编码的字符串,我想创建一个文件,其中文件的名称就是这个字符串。

UTF-16LE 字符串看起来像:

首先我想确保系统正确地看到和显示这个名字。

我试试:

char *output=some address (points to memory where line is held)
ofstream out(output);
out.close();

在输出时我没有得到正确的名称。
它看起来像:

为了创建突出显示的文件,我附加了 UTF-16LE 标记,未突出显示的文件是仅使用原始 UTF-16 行创建的 - 没有一种方法有效。

是否有一些方法可以在 Windows 中仅使用 C++ 功能而不使用 WinApi (CreateFilew) 创建具有 UTF-16LE 名称的文件?

我的编译器是 MinGW 4.0.4,Windows XP(但我希望它可以在所有 Windows 上运行)

提前感谢您的任何提示!

【问题讨论】:

  • 我相信 Windows 在文件系统上使用 UTF-8,因此您可能需要将字符串转换为 UTF-8。
  • 他们建议对 msdn.microsoft.com/en-us/library/windows/desktop/… 的所有内容使用 UTF-16,如果我没记错的话
  • Carl Norum,我不能从那里使用解决方案,因为事先不知道字符串 i.imgur.com/zTtL8.png 。我不能将我的行声明为 wchar_t line[],大小可以是任意的
  • ...wstring str = [...]; std::fstream file(str.data());...

标签: c++ windows utf-16 ofstream


【解决方案1】:

谢谢大家,但在这种情况下,C++ 流似乎是无能为力的(至少我有这样的看法)。

所以我使用了WinApi:

 #ifndef WIN32    // for Linux
   ofstream out(output);
   out.close();
 #else  // for Windows
   LPWSTR lp=(LPWSTR )output;
   CreateFileW(lp,GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ |  
        FILE_SHARE_WRITE,     NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL );
  #endif

我得到了一个名称正确的输出文件:

再次感谢!

【讨论】:

    猜你喜欢
    • 2016-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2014-06-22
    • 2012-04-21
    • 2017-07-23
    • 1970-01-01
    相关资源
    最近更新 更多