Некоторая информация:
- Я только пробовал это в Linux
- Я пробовал как с GCC (7.2.0), так и с Clang (3.8.1)
- Для моего понимания требуется С++ 11 или выше
Что происходит, когда я запускаю его
Я получаю ожидаемую строку "abcd", повторяющуюся до тех пор, пока она не ударит по позиции 4094 символа. После этого все это выдает это знак "?" до конца файла.
Что я думаю об этом?
Я думаю, что это не ожидаемое поведение и что это должно быть ошибка где-то.
Код, с которым вы можете протестировать:
#include <iostream>
#include <fstream>
#include <locale>
#include <codecvt>
void createTestFile() {
std::ofstream file ("utf16le.txt", std::ofstream::binary);
if (file.is_open()) {
uint16_t bom = 0xFEFF; // UTF-16 little endian BOM
uint64_t abcd = 0x0064006300620061; // UTF-16 "abcd" string
file.write((char*)&bom,2);
for (size_t i=0; i<2000; i++) {
file.write((char*)&abcd,8);
}
file.close();
}
}
int main() {
//createTestFile(); // uncomment to make the test file
std::wifstream file;
std::wstring line;
file.open("utf16le.txt");
file.imbue(std::locale(file.getloc(), new std::codecvt_utf16<wchar_t, 0x10ffff, std::consume_header>));
if (file.is_open()) {
while (getline(file,line)) {
std::wcout << line << std::endl;
}
}
}