Я хочу читать и писать файлы utf-16, в которых используются разделители строк LL \ R \ n "). Использование C++ (Microsoft Visual Studio 2010) iostreams. Я хочу, чтобы каждый L "\ n" записывался в поток для трансляции в L "\ r \ n" прозрачно. Использование фрейма lococ codecvt_utf16 требует, чтобы открыть fstream в ios :: двоичном режиме, потеряв обычный текстовый режим \ n на \ r \ n перевод.C++ iostream UTF-16 файл ввода/вывода с CR LF translation
std::wofstream wofs;
wofs.open("try_utf16.txt", std::ios::binary);
wofs.imbue(
std::locale(
wofs.getloc(),
new std::codecvt_utf16<wchar_t, 0x10ffff, std::generate_header>));
wofs << L"Hi!\n"; // i want a '\r' to be inserted before the '\n' in the output file
wofs.close();++
Я хочу решение без дополнительных библиотек, таких как BOOST.
Вы используете Широкие галстуки. Широким символам не гарантируется UTF-16. Они тоже могут быть UTF-32. Поэтому не полагайтесь на них. Если вы используете C++, вместо этого используйте char16_t. – doptimusprime
@dbasic Хотя 'char16_t' является правильным решением, поддержка C++ 11 (и, следовательно, тип' char16_t') в VS2010 очень невелика. –
Не хватает примерно года, дайте или возьмите несколько месяцев. Конечно, их можно обвинить в том, что они не запрограммировали машину времени. –