由于很需要转来--------二进制字符流读取,判定单字节英文标点字符和双字节中文---防止乱码

博客讲述了在处理二进制数据流时遇到的乱码问题,特别是如何在GBK编码下正确识别单字节英文字符和双字节中文字符。作者分享了解决方案,通过判断字节来防止因字节流截断导致的乱码现象。
摘要由CSDN通过智能技术生成


说明:尽信书不如无书,网上的东西本来就是精华糟粕都有的,下面这篇文章是我在做二进制数据流读取时参考的一篇文章,怎么做都有错误,不知道是哪里的问题,以为是自己的逻辑问题检查了很多遍,在自己静下心来想想的时候才发现,原来自己犯了多么严重的错误,英文的半角字符就是ASCII的那128个,这里的意思就是GBK把英文半角的128个字符放在了首部,显然文章中提示给了我应该是最起始的128个字符,而我却不知其根本而按照错误的0-0x40去判定单字节的英文字符,128显然它的编码应该是:0x00-0x80这是对自己的一次教训,也一次记录下来勉励以后。------正确结论:在读取二进制字节流的时候常常会出现乱码,这是因为同一个流中会有半角英文字符和除此以外其他的字符如中文字符。显然他们所占的字节数是不同的,在逐个读取的过程中,如何区分开来这些编码从而用不同的方式提取是一个大问题,这是我写的一个字符提取输出代码段。从其中能够看出窍门。我们可以把一位的英文字母提取出之后,对其余的中文全角字符做两位一提取两位一输出。,即可得到解析的正确结果。

			for (l = 0; l <k-1; l++) {//这里的帧校验字段用的2位
				c = (int)recData[l];
				nCheck=checkCRC(nCheck, c);
				if (recData[l]!=(byte)0x00) {//填充字节0x00
					nCount--;
					if (recData[l]>0 && recData[l]<0x80) {
					
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值