现在有一段程序,大概是这样的:
对输入的字符串str处理:byte[] bb = str.getBytes(),获得的字节数组存进一个ByteBuffer。另有一个线程不定期地从Bytebuffer里取出长度不定的字节,打包后由信号传输设备传输到另一台电脑,收到包后再解析。
现在的问题是对英文字符串处理没问题,但中文的不定期出乱码。我觉得是编码的问题。用GB2312编码,getBytes()处理后英文字符对应一个字节,中文的是两个。放到ByteBuffer里后,截取时可能刚好把中文的两个字节分开到两个包里了。因为传输后对每个包的解析是单独进行的,直接处理,没有再把字节取出来缓存后再处理,所以会出现乱码。
所以我的想法是,能不能判断ByteButter里我要截取的字节数组末尾的那个字节是英文的还是中文的字符产生的。是英文的我就不处理,是中文的就分情况处理。
哪位能给我想个办法,谢谢~
我简单做了一个。。用GBK字符库的char[],代替byte[]
public class strdeal {
public String getString(){//输入字符串
System.out.println("input string");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s="";
try {
s = br.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println(s);//可以直接打印字符串
return s;
}
public byte[] getByet(String s){//字符串转为byte[]
byte[] bb = s.getBytes();
return bb;
}
private char[] getChars (byte[] bytes) {//byte转为char[],使用GBK
Charset cs = Charset.forName ("GBK");
ByteBuffer bb = ByteBuffer.allocate (bytes.length);
bb.put (bytes);
bb.flip ();
CharBuffer cb = cs.decode (bb);
return cb.array();
}
public static void main(String args[]){//简单测试
strdeal sdeal=new strdeal();
//System.out.println(sdeal.getString());
byte[] arrbyte=sdeal.getByet(sdeal.getString());
char[] arrchar=sdeal.getChars(arrbyte);
/*for(byte b:arrbyte){
System.out.print(b);
}*/
for(char c:arrchar){
System.out.print(c);
}
System.out.println();
String res=new String(arrbyte);
System.out.println(res);
}
}
/*输出
input string
ABC124不是么
ABC124不是么
*/
相关视频
相关阅读 合理解读ADSL网速512kbit≠512KByte谁说只有ASUS可以?Gigabyte也能破P4倍频Steam免费游戏怎么领 Steam免费游戏一键领取教程鬼泣5Unable to intialize steamapi解决方法魅族note9和红米note7哪个好 魅族note9和红米note7哪个值得买魅族note9发布会直播地址 魅族note9手机发布会直播网址Apex英雄Untrusted system file错误代码解决方法红米note7和红米note5哪个好 红米note7和note5对比一览
热门文章 Wordpress本地安装教程dx1.5如何设置二级域名
最新文章
hbuilder有哪些快捷键Wordpress本地安装教程
Wordpress本地安装教程expression web 4文档乱码解决方法dz 2.5“收藏本版”关闭小对话框无法关闭解在制作安装软件之前,您必须先将易语言存盘,
人气排行 如何使用multipart/form-data格式上传文件Photoshop PS图层混合模式详解(非常详细)ISAPI_Rewrite3使用教程网站里添加收藏和设为首页代码桌面快捷方式图标不见了C#获取执行程序所在的当前路径的方法详解(XMLHttpRequest)进行跨域请求方法如何用远程桌面连接进行传输文件
查看所有0条评论>>