A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 薛振宇 中级黑马   /  2014-7-15 17:30  /  3500 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

求助:在GBK中一个英文字符是一个字节表示,而中文是两个字节表示。当读到第一个字节时,怎么知道是一个英文字节,还是中文字节的一部分啊。

5 个回复

倒序浏览
中文由两个字节表示,大部分都是两个负数,如:-34,-65(当然也有例外,但是是少数,前一个必须是负数,后一个可以是正数),可以写个简单的类测试下
回复 使用道具 举报
青程 发表于 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 09:27
这是我测试题中的一个,编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)
...

看看这个吧,http://blog.csdn.net/airborne101506/article/details/11077079
回复 使用道具 举报
我对于中文字节的判断,是没有问题的吧
回复 使用道具 举报
青程 发表于 2014-7-16 10:30
看看这个吧,http://blog.csdn.net/airborne101506/article/details/11077079

我对于中文字节的判断,是没有问题的吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马