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

ufo158 2012-03-22 10:55:49
各位,我现在使用C#读取MFC CArchive类写入的二进制流数据中的中文字符出错,读取的结果中出现乱码.

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

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

ar<<m_DlgDaqSet.m_sChnlInfo[i].strChnlEU;//


使用MFC读取,完全没有问题.

//省略部分代码
ar>>iTemp;
ar>>m_sChnlInfo[m_iChnlStart+i-1].strChnlTestPtInfo;//【相关信息】
ar>>m_sChnlInfo[m_iChnlStart+i-1].strChnlEU;


使用C#读取:

FileStream fs = new FileStream(strFileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
//省略部分代码.
iTemp = br.ReadInt32();//
strTemp = br.ReadString();//【相关信息】.
strTemp = br.ReadString();//

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

请大家帮忙看看,
读取英文+中文字符时,前面的int型可以读出,当【相关信息】则为乱码,表现为"�µ", 读取【相关信息】下面的那条string类型的的数据
...全文
291 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ufo158 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chinajiyong 的回复:]

引用 2 楼 ufo158 的回复:

完美解决.
FileStream fs = new FileStream(strFileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs, System.Text.Encoding.GetEncoding("gb2312"));
GB2312应……
[/Quote]

不知怎么,刚开始调试的时候报错,查了下才使用额小写...
改为大写,发现没问题...
呵呵..谢谢
EnForGrass 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ufo158 的回复:]

完美解决.
FileStream fs = new FileStream(strFileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs, System.Text.Encoding.GetEncoding("gb2312"));
GB2312应该为小写gb2312才对...
万分感激……
[/Quote]
都一样
ufo158 2012-03-22
  • 打赏
  • 举报
回复
完美解决.
FileStream fs = new FileStream(strFileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs, System.Text.Encoding.GetEncoding("gb2312"));
GB2312应该为小写gb2312才对...
万分感激2L的朋友...
EnForGrass 2012-03-22
  • 打赏
  • 举报
回复
设置编码GB2312
BinaryReader应该亦可以,下面是StreamReader
StreamReader reader = new StreamReader( "temp.txt ", System.Text.Encoding.GetEncoding( "GB2312 "));

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧