gpt4 book ai didi

c++ - fstream::open() Unicode 或非 Ascii 字符在 Windows 上不起作用(使用 std::ios::out)

转载 作者:可可西里 更新时间:2023-11-01 14:45:29 27 4
gpt4 key购买 nike

在一个C++项目中,我想打开一个文件(fstream::open())(这似乎是个大问题)。我的程序的 Windows 构建失败得很惨。

  • 文件“ä”(UTF-8 0xC3 0xA4)

    std::string s = ...;
    //Convert s
    std::fstream f;
    f.open(s.c_str(), std::ios::binary | std::ios::in); //Works (f.is_open() == true)
    f.close();
    f.open(s.c_str(), std::ios::binary | std::ios::in | std::ios::out); //Doesn't work

    字符串 s 是 UTF-8 编码的,但随后从 UTF-8 转换为 Latin1 (0xE4)。我正在使用 Qt,所以 QString::fromUtf8(s.c_str()).toLocal8Bit().constData()

    为什么打开文件只能读,不能写?

  • 文件“и”(UTF-8 0xD0 0xB8)

    相同的代码,根本不起作用。

看来,这个字符不适合 Windows-1252 字符集。我如何打开这样的 fstream(我没有使用 MSVC,所以 no fstream::open(const wchar_t*, ios_base::openmode) )?

最佳答案

在 Microsoft 的 STL 实现中,有一个非标准扩展(重载)允许对 UTF-16 编码字符串提供 unicode 支持。

只需将 UTF-16 编码的 std::wstring 传递给 fstream::open()。这是让它与 fstream 一起工作的唯一方法。

您可以在此处阅读更多我认为在 Windows 上支持 unicode 的最简单方法:http://utf8everywhere.org/

关于c++ - fstream::open() Unicode 或非 Ascii 字符在 Windows 上不起作用(使用 std::ios::out),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10567893/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com