黑马程序员技术交流社区

标题: 怎样用字节流读取中文字符 [打印本页]

作者: breeze    时间: 2013-5-19 10:00
标题: 怎样用字节流读取中文字符
本帖最后由 breeze 于 2013-5-20 22:48 编辑

现在有这样一个字符串"1. abc你好中文deflljj你好Java" 如何能通过字节流将每个字符都输出到控制台上, 因为每个中文都占用两个字节, 如果一个一个读取肯定会乱码, 请高手指点下
作者: 刘治广    时间: 2013-5-19 10:31
每个中文都占用两个字节, 如果一个一个读取肯定会乱码,  不是乱码而是会出现半个汉字这个现象。给你我的代码你看一下吧
public class Test10 {
public static void main(String[] args) throws Exception{

            String str = "我爱kfc并且喜欢dota";
            int num = trimGBK(str.getBytes("GBK"),8);//将字符串使用“GBK”编码,并定义截取长度
            System.out.println(str.substring(0,num) );//打印输出

      }
            public static int  trimGBK(byte[] buf,int n){ //定义方法
            int num = 0;
            boolean bChineseFirstHalf = false;  //如果是一半汉字就返回false
            for(int i=0;i<n;i++)

            {

                  if(buf[i]<0 && !bChineseFirstHalf){ //判断是否是汉字

                        bChineseFirstHalf = true;

                  }else{
                        num++;
                        bChineseFirstHalf = false;                     
                  }
            }
            return num;
      }
}

作者: 何俊森    时间: 2013-5-19 13:30
转化为字符串的形式,然后在输出。
作者: 张金铎    时间: 2013-5-19 16:14
本帖最后由 张金铎 于 2013-5-19 16:23 编辑

可以通过转换流吧,然后用BufferedWriter()输出。
  1. public static void main(String[] args) throws IOException {
  2.                 String s = "我是abc";
  3.                 OutputStream out = System.out;
  4.                 OutputStreamWriter osw = new OutputStreamWriter(out);
  5.                 BufferedWriter bw = new BufferedWriter(osw);
  6.                 bw.write(s);
  7.                 bw.newLine();
  8.                 bw.flush();
  9.                 bw.close();
  10.                
  11.         }
复制代码

作者: 曹睿翔    时间: 2013-5-20 12:29
貌似问题解决了
要是解决及时更改问题状态,重新编辑为已解决
否则继续追问




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