解决方案 »

  1.   

    用utf-8使用中文就会占用3个字节,英文的话只有一个字节 如果是unicode则都是2个字节, gbk,一个汉字字符也是2个字节
      

  2.   

    谢谢楼上的回答~
    但我用的就是GBK,还是是三个字节。
      

  3.   

    从代码看,你用了GBK,那么可以肯定是双字节。
    是哪里让你认为是3字节那?
    之后我对payloadbyte数组每1500个分一组。然后拷贝到另一个叫preparetostring的byte[]数组中。把编码发出来吧,这里肯定不是1500一组,应该是1000一组。
      

  4.   

    你用的环境是什么编码,和i/o也有关系;另外你可以强制性的将输入输出的编解码设置为相同格式,不要采用默认的格式;
    下面是关于Java中汉字编解码的分析,你可以参考一下
    http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/
      

  5.   

    编码在后面很乱~这么说吧:后面我打印出了payloadbyte.length的值,是8852,而我读入的文本,用word数字数是2948。差不多就是三倍(文档里很少出现数字,且没有字母)。
    我觉得是不是我读取文本的时候读入流用的不合适?
      

  6.   

    给你解释一下其中的编码转换关系吧:
    new InputStreamReader(new FileInputStream(filefca),"GBK"),这里使用GBK编码来读取文件内容,所以文件如果也是GBK编码,就不会产生乱码;
    linefca=payload.toString();内部调用的是new String()方法,采用的是系统默认编码;
    byte[] payloadbyte=linefca.getBytes();这句使用系统默认编码,将字符串解码为byte数组;
    系统的默认编码一般为GBK,根据你说的情况,我觉得可能是你的系统的默认编码不是GBK。
    System.getProperty("file.encoding");//获取java环境默认编码