首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#读取MFC CArchive类写入的二进制流数据中的中文字符出错,求指导.该怎么解决

2012-03-27 
C#读取MFC CArchive类写入的二进制流数据中的中文字符出错,求指导.各位,我现在使用C#读取MFC CArchive类写

C#读取MFC CArchive类写入的二进制流数据中的中文字符出错,求指导.
各位,我现在使用C#读取MFC CArchive类写入的二进制流数据中的中文字符出错,读取的结果中出现乱码.

如下是使用MFC CArchive类写入的数据.

C/C++ code
CArchive ar(&m_SetFile, CArchive::store|CArchive::bNoFlushOnDelete);//省略部分..ar<<itemp;CString str;[color=#FF0000]str=m_DlgDaqSet.m_sChnlInfo[i].strChnlTestPtInfo;//【相关信息】(中间可能有中文字符串)ar<<str;[/color]ar<<m_DlgDaqSet.m_sChnlInfo[i].strChnlEU;//


使用MFC读取,完全没有问题.
C/C++ code
//省略部分代码ar>>iTemp;[color=#FF0000]ar>>m_sChnlInfo[m_iChnlStart+i-1].strChnlTestPtInfo;//【相关信息】[/color]ar>>m_sChnlInfo[m_iChnlStart+i-1].strChnlEU;


使用C#读取:
C# code
FileStream fs = new FileStream(strFileName, FileMode.Open, FileAccess.Read);BinaryReader br = new BinaryReader(fs);//省略部分代码.iTemp = br.ReadInt32();//[color=#FF0000]strTemp = br.ReadString();//【相关信息】.[/color]strTemp = br.ReadString();//

调试发现,使用C#读取以上【相关信息】项时,发现:
1.若写入字符全部为英文,则读取没问题。
2.若写入字符为英文+中文,能读取英文字符,中文字符无法读取,并影响下一条数据的读取;
3.若写入字符为中文+英文,中文字符无法读取,能读取英文,对下一条数据的读取无影响;
4.若写入字符为全中文,则无法读取,并影响下一条数据的读取;

请大家帮忙看看,
读取英文+中文字符时,前面的int型可以读出,当【相关信息】则为乱码,表现为"?µ", 读取【相关信息】下面的那条string类型的的数据

[解决办法]
设置编码GB2312
BinaryReader应该亦可以,下面是StreamReader
StreamReader reader = new StreamReader( "temp.txt ", System.Text.Encoding.GetEncoding( "GB2312 "));

热点排行