中英文字符串被截断导致乱码

工作中碰到甲方提供文件某字符串字段被截断,遗留半个中文字符串导致获取后出现乱码,只能写个方法做下判断过滤。

char* RetTruncate(char* strSrc, int nMaxLen)
{
	if (strSrc == NULL || nMaxLen == 0) {
		return NULL;
	}

	int index = 0;
	int len = strlen(strSrc);
	while(index < nMaxLen) {
		if(strSrc[index] < 0) {
			index += 2;
		} else {
			index += 1;
		}
	}
	if(index > nMaxLen) {
		strSrc[nMaxLen - 1]='\0';
	} else if(len > nMaxLen) {
		strSrc[nMaxLen] = '\0';
	}
}

	public final String readString(int size, boolean bTruncate) throws IOException {
		byte [] b = new byte[size];
		int n =read(b);
		if (n < 0)
			throw new EOFException();
		
		if(bTruncate) RetTruncate(b, size);
		return new String(b,"gbk").trim();
	}
	
	public void RetTruncate(byte[] value, int len)
	{
		int index = 0;
		while(index < len) {
			if( value[index] < 0 ) {
				index += 2;
			} else {
				index += 1;
			}
		}
		if(index > len) {
			value[len-1]='\0';
		} else if(value.length > len) {
			value[len] = '\0';
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值