青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

love in C++, live on MFC

to get ready...

C++博客 首頁 新隨筆 聯系 聚合 管理
  47 Posts :: 0 Stories :: 97 Comments :: 0 Trackbacks
情況是這樣的,一個程序從ansi移植到了unicode,見把代碼移植成UNICODEhttp://m.shnenglu.com/flyingxu/archive/2006/05/18/7356.html),之后產生了一個問題,之前文件保存的那些文件,unicode版本還能打開嗎?這真是個大問題,如果不能,就基本表示這個程序已經半死不活了。

文件的保存基本用的序列化,比如
void?CSDITestDoc::Serialize(CArchive&?ar)
{
????
if
?(ar.IsStoring())
????{
????????
//?TODO:?add?storing?code?here

????????ar?<<?m_strName;
????}
????
else

????{
????????
//?TODO:?add?loading?code?here
????????ar?>>?m_strName;
????}
}
如果m_strName = _T("name");那么ansi情況下,保存的文件為:
04 6E 61 6D 65,一共5個字節。
然后用unicode版本保存時,是
FF FE FF 04 6E 00 61 00 6D 00 65 00,一共12個字節。

然后我發現,ansi版本的可以打開unicode版本的文件,unicode版本的也可以打開ansi版本的文件。

為什么?我覺得關鍵在于CString,我覺得CString功能比較強大。
CString的序列化函數
//?CString?serialization?code
//?String?format:
//??????UNICODE?strings?are?always?prefixed?by?0xff,?0xfffe
//??????if?<?0xff?chars:?len:BYTE,?TCHAR?chars
//??????if?>=?0xff?characters:?0xff,?len:WORD,?TCHAR?chars
//??????if?>=?0xfffe?characters:?0xff,?0xffff,?len:DWORD,?TCHARs

CArchive
&?AFXAPI?operator<<(CArchive&?ar,?const?CString&?string)
{
????
//?special?signature?to?recognize?unicode?strings
#ifdef?_UNICODE
????ar?
<<?(BYTE)0xff;
????ar?
<<?(WORD)0xfffe;
#endif

????
if?(string.GetData()->nDataLength?<?255)
????{
????????ar?
<<?(BYTE)string.GetData()->nDataLength;
????}
????
else?if?(string.GetData()->nDataLength?<?0xfffe)
????{
????????ar?
<<?(BYTE)0xff;
????????ar?
<<?(WORD)string.GetData()->nDataLength;
????}
????
else
????{
????????ar?
<<?(BYTE)0xff;
????????ar?
<<?(WORD)0xffff;
????????ar?
<<?(DWORD)string.GetData()->nDataLength;
????}
????ar.Write(
string.m_pchData,?string.GetData()->nDataLength*sizeof(TCHAR));
????
return?ar;
}
它對unicode做了特別的支持
特別是當它在讀序列化過程的時候
CArchive&?AFXAPI?operator>>(CArchive&?ar,?CString&?string)
{
#ifdef?_UNICODE
????
int?nConvert?=?1;???//?if?we?get?ANSI,?convert

#else
????
int?nConvert?=?0;???//?if?we?get?UNICODE,?convert
#endif

????UINT?nNewLen?
=?_AfxReadStringLength(ar);
????
if?(nNewLen?==?(UINT)-1
)
????{
????????nConvert?
=?1?-
?nConvert;
????????nNewLen?
=
?_AfxReadStringLength(ar);
????????ASSERT(nNewLen?
!=?-1
);
????}

????
//?set?length?of?string?to?new?length

????UINT?nByteLen?=?nNewLen;
#ifdef?_UNICODE
????
string.GetBufferSetLength((int
)nNewLen);
????nByteLen?
+=?nByteLen?*?(1?-?nConvert);??//?bytes?to?read

#else
????nByteLen?
+=?nByteLen?*?nConvert;????//?bytes?to?read
????if?(nNewLen?==?0)
????????
string.GetBufferSetLength(0
);
????
else

????????
string.GetBufferSetLength((int)nByteLen+nConvert);
#endif


????
//?read?in?the?characters
????if?(nNewLen?!=?0)
????{
????????ASSERT(nByteLen?
!=?0
);

????????
//?read?new?data

????????if?(ar.Read(string.m_pchData,?nByteLen)?!=?nByteLen)
????????????AfxThrowArchiveException(CArchiveException::endOfFile);

????????
//?convert?the?data?if?as?necessary

????????if?(nConvert?!=?0)
????????{
#ifdef?_UNICODE
????????????CStringData
*?pOldData?=?string
.GetData();
????????????LPSTR?lpsz?
=?(LPSTR)string
.m_pchData;
#else

????????????CStringData
*?pOldData?=?string.GetData();
????????????LPWSTR?lpsz?
=?(LPWSTR)string
.m_pchData;
#endif

????????????lpsz[nNewLen]?
=?'\0';????//?must?be?NUL?terminated
????????????string.Init();???//?don't?delete?the?old?data
????????????string?=?lpsz;???//?convert?with?operator=(LPWCSTR)
????????????CString::FreeData(pOldData);
????????}
????}
????
return
?ar;
}
也就是說,不管你保存的文件是不是unicode,都可以讀進來,轉換稱當前unicode或者ansi版本

不過回到文章的標題,這里只講了用CString序列化的保存。如果是其他保存方式,可以學著CString的做法,寫函數把文件總是能讀進來。
posted on 2006-06-13 23:53 flyingxu 閱讀(1336) 評論(0)  編輯 收藏 引用 所屬分類: VC/MFC
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区三区久久精品茉莉花 | 亚洲欧美成人在线| 91久久午夜| 99精品免费| 亚洲午夜精品国产| 久久国产精品99国产| 久久躁日日躁aaaaxxxx| 欧美黄色视屏| 亚洲天堂成人在线视频| 久久精品一区中文字幕| 欧美黄污视频| 国产视频一区在线| 91久久在线| 性欧美videos另类喷潮| 麻豆91精品91久久久的内涵| 亚洲精品一区二区在线| 亚洲欧美视频一区| 美玉足脚交一区二区三区图片| 欧美日本一区| 欧美在线亚洲在线| 亚洲成在人线av| 在线视频你懂得一区| 欧美在线免费观看视频| 欧美风情在线观看| 在线亚洲欧美视频| 另类成人小视频在线| 国产精品视频一二| 一本久久青青| 欧美电影在线观看| 亚洲免费在线| 欧美日韩中文在线| 亚洲精品偷拍| 欧美大胆成人| 久久久欧美一区二区| 国产精品一二三| 亚洲手机成人高清视频| 亚洲成色777777在线观看影院| 亚洲一区二区成人在线观看| 欧美激情第一页xxx| 在线观看视频欧美| 久久综合九色综合欧美就去吻| 一本色道久久综合亚洲二区三区| 免费永久网站黄欧美| 国产一区二区三区精品久久久| 一区二区精品国产| 亚洲激情黄色| 欧美电影免费观看网站| 亚洲国产天堂久久综合| 麻豆精品视频在线观看| 久久xxxx| 一区在线免费| 欧美成人免费网| 老**午夜毛片一区二区三区| 国内精品久久久久国产盗摄免费观看完整版 | 欧美专区福利在线| 国产一区二区视频在线观看| 欧美在线短视频| 午夜精品久久久久久久久| 国产精品久久久久久久久久免费| 日韩一二在线观看| 亚洲精品日韩在线| 欧美日韩99| 亚洲一区免费视频| 亚洲欧美99| 国产亚洲美州欧州综合国| 久久久国产一区二区三区| 欧美在线观看视频| 精品福利免费观看| 欧美福利精品| 欧美日韩免费一区二区三区视频| 亚洲免费观看高清在线观看| 亚洲另类自拍| 国产精品综合av一区二区国产馆| 香蕉av福利精品导航| 欧美一级久久久| 在线观看成人一级片| 最新亚洲一区| 国产精品亚洲综合| 欧美久久久久| 亚洲国产精品999| 亚洲理伦在线| 国产精品丝袜91| 六月婷婷一区| 欧美午夜久久久| 久久久久久网址| 欧美高清视频在线| 亚洲欧美韩国| 免费不卡视频| 欧美有码视频| 欧美精品一区二区三区在线看午夜| 亚洲视频每日更新| 久久久久久久久久久久久9999 | 久久精品在线免费观看| 久久亚洲精品一区| 亚洲性图久久| 久久综合色一综合色88| 亚洲综合久久久久| 免费观看日韩av| 欧美在线一区二区| 欧美日韩视频免费播放| 欧美 日韩 国产 一区| 国产精品视频免费观看www| 亚洲国产美国国产综合一区二区| 国产精品一区二区视频| 亚洲国产综合在线| 亚洲电影成人| 欧美在线视频在线播放完整版免费观看 | 亚洲国产片色| 亚洲欧美资源在线| 亚洲精品在线电影| 久久久久久久久久久成人| 亚洲男人av电影| 欧美久久婷婷综合色| 欧美不卡视频一区| 韩国v欧美v日本v亚洲v| 亚洲综合日韩| 亚洲欧美激情四射在线日| 欧美激情乱人伦| 欧美电影免费观看大全| 一区二区三区无毛| 欧美在线视屏| 久久福利一区| 国产酒店精品激情| 亚洲免费在线观看| 亚洲欧美日韩中文视频| 欧美三级视频在线观看| 亚洲精品一区二区三区婷婷月| 亚洲精品久久久一区二区三区| 久久噜噜噜精品国产亚洲综合| 久久精品在线| 狠狠色狠狠色综合日日tαg| 久久成人资源| 美女999久久久精品视频| 激情久久久久久久| 久久精品99国产精品酒店日本| 久久精品国产v日韩v亚洲| 韩国一区电影| 国产欧美一区二区精品婷婷| 一区二区三区高清视频在线观看| 亚洲伦伦在线| 欧美精品日韩精品| 99re6这里只有精品| 亚洲影院免费| 国产日韩一区二区三区在线播放| 亚洲一线二线三线久久久| 亚洲综合第一页| 国产精品日本欧美一区二区三区| 中文在线不卡视频| 久久精品一区二区三区四区| 激情综合在线| 欧美高清在线一区二区| 亚洲看片网站| 久久九九99视频| 亚洲品质自拍| 国产精品美女久久久久av超清| 欧美一区二区三区男人的天堂 | 久久久久久精| 亚洲激情黄色| 午夜一区在线| 亚洲第一区在线| 欧美日韩在线精品| 午夜视频一区在线观看| 免费不卡在线视频| aa亚洲婷婷| 狠狠色丁香婷婷综合影院| 欧美全黄视频| 久久久国产午夜精品| 日韩西西人体444www| 久久男女视频| 国产精品99久久久久久人 | 国产精品啊v在线| 久久福利电影| 99成人在线| 老司机aⅴ在线精品导航| 在线一区二区视频| 在线免费观看日韩欧美| 欧美深夜福利| 免费短视频成人日韩| 亚洲欧美日韩国产中文在线| 欧美成人午夜视频| 羞羞视频在线观看欧美| 日韩一本二本av| 在线观看欧美一区| 国产日韩欧美日韩| 国产精品成人观看视频免费| 美玉足脚交一区二区三区图片| 一本色道久久综合亚洲精品按摩 | 欧美在线免费播放| 99精品视频网| 亚洲国产精品久久91精品| 欧美一区二区三区精品电影| 99xxxx成人网| 亚洲第一久久影院| 国产一区视频在线看| 国产精品日韩电影| 欧美午夜在线一二页| 欧美人与禽性xxxxx杂性| 麻豆成人小视频| 久久精品在线| 久久精品理论片|