在做一个文件处理的程序,在windows上调试通过后放到linux始终不好使,经过调试发现原因是在windows上面byte[]转换成字符串然后转回来大小正常,但是在linux上这个转换会导致大小发生变化,测试代码如下:            File checkFile = new File("含有中文内容的文件");
            FileInputStream objFileInputStream = new FileInputStream(checkFile);
            byte[] alldata = new byte[(int) checkFile.length()];
            objFileInputStream.read(alldata);
            System.out.println(alldata.length);
            String strFileContent = new String(alldata);
            System.out.println(strFileContent.getBytes().length);
            String encoding = System.getProperty("file.encoding");
            System.out.println(encoding);在windows上执行结果为:
11594
11594
GBK在linux上执行结果为:
11594
10649
GBK不知道此现象是为何

解决方案 »

  1.   

    String strFileContent = new String(alldata);
    你加个字符编码集试一下,如:String strFileContent = new String(alldata,"gbk");
      

  2.   


      System.out.println(alldata.length);
      String strFileContent = new String(alldata,"gb2312");
      System.out.println(strFileContent.getBytes("gb2312").length);
    //用这个代码做测试的时候,没出现问题,我的linix默认是utf-8,因此没法测试。
      

  3.   

    会不会和这个有关
    windows换行是\r\n,十六进制数值是:0D0A
    LINUX换行是\n,十六进制数值是:0A
      

  4.   

    1、系统编码保持一致
    2、jdk版本保持一致
    3、经过测试对于一般英文、汉字、回车换行等都没有没有。只能判定是java对特殊字符编码在不同平台上有所不同。