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

love in C++, live on MFC

to get ready...

C++博客 首頁 新隨筆 聯系 聚合 管理
  47 Posts :: 0 Stories :: 97 Comments :: 0 Trackbacks
情況是這樣的,一個程序從ansi移植到了unicode,見把代碼移植成UNICODEhttp://www.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 閱讀(1339) 評論(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>
            亚洲黄色在线观看| 欧美电影专区| 亚洲人成网站999久久久综合| 亚洲国产成人tv| 女人香蕉久久**毛片精品| 欧美日韩一区在线| 欧美激情精品久久久久久免费印度 | av成人动漫| 久久久视频精品| 国产精品久久久久久久9999| 国产一区二区三区免费在线观看| 91久久精品网| 欧美一区二区日韩一区二区| 夜夜嗨av色综合久久久综合网| 欧美一区二区黄色| 午夜精品久久久99热福利| 久久久夜精品| 亚洲福利一区| 黄色成人在线网站| 久久精品女人| 亚洲黄色性网站| 欧美一区高清| 欧美午夜免费影院| 一区二区三区免费在线观看| 欧美国产精品v| 一区二区国产在线观看| 久久av二区| 国产精品va在线| 亚洲国产高清在线观看视频| 欧美在线视频全部完| 亚洲国产精品久久久久婷婷884 | 亚洲图中文字幕| 亚洲精品国产视频| 欧美人与禽猛交乱配视频| 在线观看成人av| 亚洲第一在线综合网站| 美脚丝袜一区二区三区在线观看 | 亚洲国产精品一区二区久| 久久99伊人| 国产精品捆绑调教| 99日韩精品| 国产精品久久一区二区三区| 亚洲免费观看高清完整版在线观看熊 | 久久婷婷亚洲| 欧美va天堂| 一区二区三区国产| 亚洲影院免费观看| 亚洲福利在线看| 亚洲色图在线视频| 国产精品午夜视频| 久久久噜久噜久久综合| 欧美精品二区| 中日韩美女免费视频网址在线观看 | 久久精品1区| 久久人人爽人人| 在线亚洲精品福利网址导航| 99精品视频一区二区三区| 欧美三级午夜理伦三级中文幕 | 亚洲电影视频在线| 中文日韩在线视频| 亚洲精品视频一区| 午夜精品福利视频| 亚洲精品一区久久久久久| 久久精品视频免费| 亚洲欧美日韩精品久久久| 嫩草影视亚洲| 欧美一区二区大片| 欧美日韩综合网| 91久久精品一区| 在线成人激情黄色| 亚洲午夜激情免费视频| 一区二区三区 在线观看视频| 亚洲第一网站| 久久久精品国产免大香伊| 欧美在线网址| 欧美亚洲第一区| 99国产精品99久久久久久| 亚洲人成高清| 麻豆精品视频在线观看| 久久久亚洲国产天美传媒修理工| 国产精品久久久久久久久搜平片| 亚洲区在线播放| 99av国产精品欲麻豆| 老司机精品久久| 欧美成人综合一区| 在线播放一区| 欧美1区2区视频| 亚洲福利电影| 亚洲精品一二| 欧美日韩精品欧美日韩精品| 亚洲第一综合天堂另类专| 狠狠色狠狠色综合日日五| 亚洲精品婷婷| 99re热精品| 国产精品qvod| 亚洲免费综合| 欧美专区在线播放| 在线观看免费视频综合| 欧美专区日韩专区| 免费精品视频| 中文久久精品| 欧美日韩国产在线看| 一区二区久久久久久| 亚洲一区二区三区免费在线观看| 欧美日韩综合在线免费观看| 在线视频欧美精品| 久久精品一区二区三区不卡牛牛| 国产主播精品在线| 久久香蕉国产线看观看av| 欧美 日韩 国产一区二区在线视频| 亚洲欧洲综合另类| 国产精品久久九九| 久久精品一级爱片| 亚洲精品自在久久| 欧美一区二视频在线免费观看| 国产欧美一区二区精品婷婷 | 日韩一级精品视频在线观看| 亚洲欧美综合| 亚洲国产日韩欧美一区二区三区| 欧美粗暴jizz性欧美20| 亚洲视频你懂的| 亚洲成人在线视频播放 | 国产亚洲成av人片在线观看桃| 午夜精品久久久久久99热| 亚洲欧洲在线看| 欧美成人精品在线观看| 香蕉久久夜色精品国产使用方法| 黄色成人在线免费| 国产精一区二区三区| 欧美视频在线不卡| 欧美激情一区二区三区成人| 欧美一区午夜精品| 日韩亚洲精品视频| 亚洲国产午夜| 久久深夜福利| 亚洲自拍三区| 99精品视频网| 亚洲经典在线看| 国产亚洲精品高潮| 欧美精品成人91久久久久久久| 午夜视频在线观看一区二区三区 | 亚洲女人天堂成人av在线| 一区二区欧美精品| 亚洲激情在线| 亚洲国产aⅴ天堂久久| 在线观看欧美激情| 在线国产精品一区| 狠狠色综合网| 好看不卡的中文字幕| 国产精品白丝av嫩草影院| 欧美日韩国产va另类| 鲁大师成人一区二区三区| 久久电影一区| 久久高清国产| 欧美一区观看| 久久久久久9999| 久久在线免费观看| 狂野欧美性猛交xxxx巴西| 另类av一区二区| 欧美大片免费久久精品三p| 欧美ed2k| 欧美精品亚洲精品| 欧美久久综合| 欧美女人交a| 国产精品乱码久久久久久| 国产精品高精视频免费| 欧美午夜无遮挡| 国产亚洲视频在线| 黄色欧美日韩| 日韩亚洲成人av在线| 中文网丁香综合网| 久久激情久久| 亚洲国产欧美不卡在线观看| 99精品视频免费在线观看| 欧美呦呦网站| 欧美久久成人| 国产欧美日韩在线视频| 在线不卡免费欧美| 亚洲午夜女主播在线直播| 欧美在线地址| 亚洲日本免费电影| 欧美一区二区三区久久精品茉莉花 | 欧美jjzz| 一本色道**综合亚洲精品蜜桃冫| 午夜欧美不卡精品aaaaa| 蜜臀av在线播放一区二区三区| 欧美激情综合| 在线观看日韩国产| 亚洲欧洲另类国产综合| 亚洲视频图片小说| 蜜桃av久久久亚洲精品| 亚洲精品一区二区三区福利| 欧美专区在线观看一区| 欧美日韩一区自拍| 亚洲福利视频免费观看| 亚洲欧美久久久久一区二区三区| 欧美成人国产一区二区| 亚洲自拍偷拍麻豆| 欧美日韩人人澡狠狠躁视频| 狠狠色丁香婷婷综合久久片|