在做一个文件处理的程序,在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不知道此现象是为何
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不知道此现象是为何
你加个字符编码集试一下,如:String strFileContent = new String(alldata,"gbk");
System.out.println(alldata.length);
String strFileContent = new String(alldata,"gb2312");
System.out.println(strFileContent.getBytes("gb2312").length);
//用这个代码做测试的时候,没出现问题,我的linix默认是utf-8,因此没法测试。
windows换行是\r\n,十六进制数值是:0D0A
LINUX换行是\n,十六进制数值是:0A
2、jdk版本保持一致
3、经过测试对于一般英文、汉字、回车换行等都没有没有。只能判定是java对特殊字符编码在不同平台上有所不同。