關于CFile寫入檔案的困惑。。。
這是一個MFC程式,用的是VS2015.首先創建一個MFC應用程式,點擊對話框資源的確定鍵進行寫入代碼。
編碼方式是Unicode
代碼如下:
void CMFCApplication4Dlg::OnBnClickedOk()
{
CFile file;
const TCHAR *p = _T("我愛你一萬年");
if (!file.Open(_T("./why.txt"), CFile::modeCreate | CFile::modeWrite)) //功能 自動創建寫入 已經存在就清空
{
AfxMessageBox(_T("保存檔案失敗"));
return;
}
file.Write(p, _tcslen(p) * 2);
file.Close();
}
然后打開這個記事本檔案顯示:我愛你一萬年
然而當我把const TCHAR *p = _T("我愛你一萬年");改為const TCHAR *p = _T("我愛你中國"); 再一次打開記事本發現顯示出現亂碼:b1r`O-N齎,隨后我又試了一些文字發現有的字串可以正常顯示有的卻不能:這其中字母和數字的組合顯示均正常,而字母數字和漢字的組合出現上述同樣的問題。
這是為什么請各位指教。。
uj5u.com熱心網友回復:
資料長度的問題uj5u.com熱心網友回復:
如果你確定你寫的是Unicode檔案,應該是沒有問題的。uj5u.com熱心網友回復:
編碼方式選擇的是Unicodeuj5u.com熱心網友回復:
我換了一臺電腦,發現了同樣的問題,應該不是電腦的問題uj5u.com熱心網友回復:
修改代碼為:CFile file;
const TCHAR *p = _T("我愛你中國人");
if (!file.Open(_T("./why.txt"), CFile::modeCreate | CFile::modeWrite)) //功能 自動創建寫入 已經存在就清空
{
AfxMessageBox(_T("保存檔案失敗"));
return;
}
WORD unicode = 0xFEFF; //這句重要
file.Write(&unicode, 2); //這句重要
file.Write(p, _tcslen(p) * 2);
file.Close();
問題解決
參考:http://blog.sina.com.cn/s/blog_68d43527010118l3.html
uj5u.com熱心網友回復:
僅需要在UNICODE環境下寫入BOM
#if (defined UNICODE || defined _UNICODE)
WORD unicode = 0xFEFF; //這句重要
file.Write(&unicode, 2); //這句重要
#endif
uj5u.com熱心網友回復:
要把這幾行代碼加到哪里去呢,,剛開始學習不懂
uj5u.com熱心網友回復:
CFile file;
const TCHAR *p = _T("我愛你中國人");
if (!file.Open(_T("./why.txt"), CFile::modeCreate | CFile::modeWrite)) //功能 自動創建寫入 已經存在就清空
{
AfxMessageBox(_T("保存檔案失敗"));
return;
}
#if (defined UNICODE || defined _UNICODE)
WORD unicode = 0xFEFF; //這句重要
file.Write(&unicode, 2); //這句重要
#endif
file.Write(p, _tcslen(p) * 2);
file.Close();
uj5u.com熱心網友回復:
CFile file;
const TCHAR *p = _T("我愛你中國人");
if (!file.Open(_T("./why.txt"), CFile::modeCreate | CFile::modeWrite)) //功能 自動創建寫入 已經存在就清空
{
AfxMessageBox(_T("保存檔案失敗"));
return;
}
#if (defined UNICODE || defined _UNICODE)
WORD unicode = 0xFEFF; //這句重要
file.Write(&unicode, 2); //這句重要
#endif
file.Write(p, _tcslen(p) * 2);
file.Close();
Thank you
uj5u.com熱心網友回復:
你把unicode 轉換成多位元組的WideCharToMultiByte 再寫入uj5u.com熱心網友回復:
txt unicode 等非ansi編碼 都要加頭的,雖然txt打開看不到,但二進制十六進制可以看到uj5u.com熱心網友回復:
對電腦而言沒有亂碼,只有二進制位元組;對人腦才有亂碼。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/89677.html
標籤:基礎類
上一篇:如何從檔案的最后一行開始往上讀?
下一篇:語音轉換文本的例子
