В Linux у меня возникли проблемы с записью UTF-16 для работы с использованием класса stream, в то время как тот же код отлично работает в Windows. Ниже приведен пример кодаПочему thestream не пишет utf16 на linux в двоичном режиме?
MyString content;
content = L"hello\r\n";
const short unsigned int* output = content.asUnicodeType<MyString::UTF16>().c_str();
ofstream outFile("test.txt", std::ios::out | std::ios::binary);
outFile.write((char *)output, content.size() * sizeof(MyString::UTF16));
//outFile.write((char *)content.c_str(), content.size() * sizeof(wchar_t));
outFile.close();
return 0;
Я подтвердил, что выход правильно преобразуется в UTF-16 формат
(gdb) x /16b output
0x61a288: 104 0 101 0 108 0 108 0
0x61a290: 111 0 13 0 10 0 0 0
Однако, после того, как закончить, и я попытался открыть файл. Похоже, что контент записывается как UTF8, несмотря на то, что я прошу его писать в двоичном режиме.
Если я переключусь и напишу его как широкий символ, то контент правильно написан как UTF32 в Linux.
Любые предложения были бы замечательными!
PS: из-за ограничений платформы, я не могу использовать C++ 11 стандартных
Благодаря
Что такое 'MyString'? – Deduplicator
Это просто класс, который обертывает строку wchar_t. Это не имеет большого значения, поскольку я пишу содержимое вывода – chickenmagician
Что вам дает 'od -t x1 test.txt'? –