各位,我现在使用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类型的的数据
//省略部分..
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类型的的数据
解决方案 »
- 问个简单的问题,IE有GUID吗?如果有,如何获取?
- winform 动态生成的 DataGridView 添加行 如何有默认值?
- 如何用C#编程启动磁盘配额?这问题困倒我好多天了
- 类是押注的程序,该怎么写???
- C# 怎么调用ANSYS程序啊?
- filesystemwatcher组件的一个问题--只要解决问题肯定揭贴
- C# 的richTextBox.LoadFile无法打开纯文本文件,是怎么回事
- 不太理解下面的代码,希望大侠过来讲解下,谢谢
- 急需高手解决,uploadify遇到上传比较诡异问题,报Security Error
- C#新手,请教如何添加、删除自定义函数的问题
- C#中导入C++生成的dll文件错误
- 如何实现外网传送文件
BinaryReader应该亦可以,下面是StreamReader
StreamReader reader = new StreamReader( "temp.txt ", System.Text.Encoding.GetEncoding( "GB2312 "));
FileStream fs = new FileStream(strFileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs, System.Text.Encoding.GetEncoding("gb2312"));
GB2312应该为小写gb2312才对...
万分感激2L的朋友...