黑马程序员技术交流社区

标题: GBK编码中英文和中文是怎么区分的吗 [打印本页]

作者: 薛振宇    时间: 2014-7-15 17:30
标题: GBK编码中英文和中文是怎么区分的吗
求助:在GBK中一个英文字符是一个字节表示,而中文是两个字节表示。当读到第一个字节时,怎么知道是一个英文字节,还是中文字节的一部分啊。
作者: 青程    时间: 2014-7-16 00:10
中文由两个字节表示,大部分都是两个负数,如:-34,-65(当然也有例外,但是是少数,前一个必须是负数,后一个可以是正数),可以写个简单的类测试下
作者: 薛振宇    时间: 2014-7-16 09:27
青程 发表于 2014-7-16 00:10
中文由两个字节表示,大部分都是两个负数,如:-34,-65(当然也有例外,但是是少数,前一个必须是负数,后 ...

这是我测试题中的一个,编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)

例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文,这是我写的程序,指教一下:String defaultCharSet=Charset.defaultCharset().toString();
                System.out.print(defaultCharSet);//显示默认的编码java默认是GBK
                BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
                String str="";
                try {
                        while(!str.equals("end")){   //开始得到键盘输出,通过字符串end控制循环
                        System.out.print("输入一个混合的字符串:");       
                        str = in.readLine();
                        byte b[]=str.getBytes("GBK");//将字符串转化成字节
                        byte c[]=new byte[1024];
                        int k=0;
                    for(int i=0;i<b.length;i++){//英文用一个字节表示在0-127范围内,中文由两个字节表示,第一个字节是负数
                             if(b<0) {            //如果出现一个负数,就跳过这一个和下一个字节;
                                     i++;
                           }
                             else{
                             c[k]=b;
                            k++;
                             }
                        }
                 
                          System.out.println("去除中文的字符串:"+new String(c));//输出字符串
                     
                 }
                }catch (IOException e) {
                        e.printStackTrace();
                }

作者: 青程    时间: 2014-7-16 10:30
薛振宇 发表于 2014-7-16 09:27
这是我测试题中的一个,编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)
...

看看这个吧,http://blog.csdn.net/airborne101506/article/details/11077079
作者: 薛振宇    时间: 2014-7-16 10:37
我对于中文字节的判断,是没有问题的吧
作者: 薛振宇    时间: 2014-7-16 10:38
青程 发表于 2014-7-16 10:30
看看这个吧,http://blog.csdn.net/airborne101506/article/details/11077079

我对于中文字节的判断,是没有问题的吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2