在Linux上,我在使用ofstream類編寫UTF-16文件時遇到了一些麻煩,而相同的代碼在Windows上工作得非常好。下面是示例代碼爲什麼ofstream不會在二進制模式下在linux上編寫utf16?
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,儘管事實上我要求它以二進制模式寫入
如果我切換並將它寫爲寬字符,那麼在Linux上將內容正確寫爲UTF32。
任何建議都會很棒!
PS:由於平臺的限制,我不能使用C++ 11標準
感謝
什麼是MyString? – Deduplicator 2014-10-01 20:41:05
這只是一個包裝wchar_t字符串的類。當我寫輸出內容時,它並不重要。 – chickenmagician 2014-10-01 20:45:16
'od -t x1 test.txt'給你什麼? – 2014-10-01 20:50:35