我对 C++ 很陌生。我想在 Visual Studio 2019 中读取 C++17 中的 UTF-16 文本文件。
我在互联网上尝试了几种方法(包括StackOverflow),但没有一个起作用,并且其中一些无法编译(我认为它们只支持较旧的编译器)。
我试图在不使用任何第三方库的情况下实现这一目标。
这会读取一个文本文件,但它在每个字母之间有一些奇怪的字符和空格。
// open file for reading
std::wifstream istrm(filename, std::ios::binary);
if (!istrm.is_open()) {
std::cout << "failed to open " << filename << '\n';
}
else {
std::wstring s;
std::getline(istrm, s);
std::wcout << s << std::endl;
}
然后我使用以下库找到了一些解决方案
#include <locale>
#include <codecvt>
// open file for reading
std::wifstream istrm(filename, std::ios::binary);
istrm.imbue(std::locale(istrm.getloc(), new std::codecvt_utf16<wchar_t, 0x10ffff, std::consume_header>));
if (!istrm.is_open()) {
std::cout << "failed to open " << filename << '\n';
}
else {
std::wstring s;
std::getline(istrm, s);
std::wcout << s << std::endl;
}
这次甚至没有编译,出现以下错误std::codecvt_utf16
line:
错误 C4996 'std::codecvt_utf16':警告 STL4017:std::wbuffer_convert、std::wstring_convert 和标头(包含 std::codecvt_mode、std::codecvt_utf8、std::codecvt_utf16 和 std::codecvt_utf8_utf16)已弃用在 C++17 中。 (std::codecvt 类模板并未弃用。)C++ 标准不提供等效的未弃用功能;考虑使用 MultiByteToWideChar() 和 WideCharToMultiByte() 代替。您可以定义 _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING 或 _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS 以确认您已收到此警告。
如果有人可以为此提供解决方案,我将不胜感激。
提前致谢。