Я очень плохо знаком с C ++.Я хочу прочитать текстовый файл UTF-16 в C ++ 17 в Visual Studio 2019.
Я пробовал несколько методов в Интернете (включая StackOverflow), но ни один из них не работал, а некоторые из них не 't compile (я думаю, что они поддерживают только старые компиляторы).
Я пытаюсь достичь этого без использования сторонних библиотек.
Это читает текстовый файл, номежду каждой буквой есть несколько странных символов и пробелов.
// 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
:
Ошибка 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, чтобы подтвердить, что вы получили это предупреждение.
Я был бы признателен, если бы кто-то мог предоставить решение для этого.
* за 10 * 10 * благодарность