将 Unicode UTF-8 文件读入 wstring

新手上路,请多包涵

如何在 Windows 平台上将 Unicode (UTF-8) 文件读入 wstring (s)?

原文由 Abdelwahed 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 956
1 个回答

最近处理了所有的编码,以这种方式解决。最好使用 std::u32string,因为它在所有平台上都有稳定的大小,并且大多数字体都使用 utf-32 格式。 (文件仍应为 utf-8 格式)

 std::u32string readFile(std::string filename) {
    std::basic_ifstream<char32_t> fin(filename);
    std::u32string str{};
    std::getline(fin, str, U'\0');
    return str;
}

对于这种在多平台上工作的方法,当您需要不完整地读取文件时,您应该只使用 getline 函数(记得写分隔符,没有分隔符函数返回异常 std::bad_cast)在行之间移动(或查找某个字符) ,可以通过 seekg 和 tellg 保存行位置值。并且不要在字符之间移动,只需使用 substr。

我发现在标准库中读取文件的所有其他方法都无法充分处理具有动态字符大小的文件。

原文由 Hedgeberry 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题