二进制文件中汉字的问题

CoolMaker 2003-11-13 10:17:26
我有个二进制文件,是在VB中用Open…For Binary…保存的,里面有中英文字符串和数字,现在在C#中读取字符串时出了问题。

我用
FileStream fs = new FileStream(strTrcName, FileMode.Open,FileAccess.Read);
BinaryReader r = new BinaryReader(fs,Encoding.Default);
打开二进制文件


strName1 = new string(r.ReadChars(10));
strName2 = new string(r.ReadChars(10));
strName3 = new string(r.ReadChars(10));
读取长度为10个字节的字符串,如果是纯英文的没问题,但是如果有中文,它就会把一个汉字认为是一个字符,其实它是两个字节,比如“李明”+8Null它会认为是ReadChars(10),而“李小明”+7Null它也会认为是ReadChars(10)。
我想在ReadChars(n)中用n表示精确的字节数,这样在读取后面的信息时在字节上不会错位,请教各位高人应该怎么做。。。。
...全文
223 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
MikeWKL 2003-11-13
  • 打赏
  • 举报
回复
FileStream f_stream;
f_stream = new FileStream(YourFileName, FileMode.Open, FileAccess.Read);
BinaryReader fReader = new BinaryReader(f_stream);

string str = System.Text.Encoding.Default.GetString(fReader.ReadBytes(n));

应该是你想实现的。
ETstudio 2003-11-13
  • 打赏
  • 举报
回复
把你写入的那段给我看看
myhex 2003-11-13
  • 打赏
  • 举报
回复
你用了Encoding.Default,所以会这样的。

你如果非要精确到字节数,就不要用ReadChars(10)而是用ReadBytes(10)了,但这样可能会把汉字切开
lbywyj 2003-11-13
  • 打赏
  • 举报
回复
对:你用byte[] b = Encoding.GetEncoding("GB2312").GetBytes(sString);
就可以解决汉字出错的问题
小李飞刀 2003-11-13
  • 打赏
  • 举报
回复
To CoolMaker:
我想主要的问题在于如何区分Ascii字符和汉字,以下代码可以参考:
byte[] b = System.Text.Encoding.GetEncoding("GB2312").GetBytes(aString);
//写缓冲区arrayListBuffer
for(int i = 0; i< b.Length ; i++)
{
if(b[i] <= 0x7F) //处理ASCII字符
{
...
}
else //处理汉字
{
...
}
}//end for

110,538

社区成员

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

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

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