您的位置:首页 > 运维架构 > Linux

Windows与Linux下Base64编码问题

2015-10-16 15:48 1421 查看
Java中,String有很多个构造方法,其中有三个如下图所示:



人们习惯性喜欢使用没有字符集的构造方法,因为简单!而我也正是犯了同样的错误!

先贴出代码:

System.out.println("````````````````````````````````````" + new String(userQues.getBytes("GBK")));
System.out.println("````````````````````````````````````" + new String(Base64.decodeBase64(userQues.getBytes("GBK"))));
System.out.println("````````````````````````````````````" + Base64.encodeBase64String(new String(Base64.decodeBase64(userQues.getBytes("GBK"))).getBytes("GBK")));


这段代码在本地windows环境下运行正常,结果如图:



但是部署到linux环境后,出现结果却很奇怪:



这说明第一次new String()的时候,字符集就出现了问题,导致base64解码失败,进一步编码也就和初始编码字符串不一致了!

于是查看两个系统的编码集结果如下

Windows:



936代表的编码格式就是GBK

Linux:



linux的系统编码为UTF-8

问题查出来就好解决了!

对代码进一步优化,减少对系统编码的依赖:

System.out.println("````````````````````````````````````" + new String(userQues.getBytes("GBK")));
System.out.println("````````````````````````````````````" + new String(Base64.decodeBase64(userQues.getBytes("GBK")), "GBK"));
System.out.println("````````````````````````````````````" + Base64.encodeBase64String(new String(Base64.decodeBase64(userQues.getBytes("GBK")), "GBK").getBytes("GBK")));


问题完美解决 !
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: