linux(centos7)下程序中文输出乱码问题的解决
(2017-09-28 17:34:14)| 分类: 软件 |
目前的程序代码都是在window编写,编码格式为GBK。转移到linux下,编译正常,在控制台运行时中文输出为乱码。查linux的LANG发现为UTF-8,于是修改为GBK。再次运行程序,依然为乱码。百思不得其解,查各种资料,也都是在LANG等各种配置上解决,可我已经修改了,而且桌面、菜单上的中文都显示正常。问题出现在哪里?灵感来了挡不住,我突然想可能是控制台本身是否有编码配置呢?检查终端控制台的菜单项,果然有一个编码项,其设置的正好为UTF-8.修改为GBK以后,再次运行程序,中文输出正常。
在为解决上述问题查资料的过程中,发现有位同学提了一个这样的问题:
CharSetTest.java文件内容如下,在Windows下编译为class文件。
import java.nio.charset.Charset;
import java.io.OutputStreamWriter;
import java.io.ByteArrayOutputStream;
public class CharSetTest {
}
首先在本地Windows上运行:
D:\Apps\Java\jdk1.6.0_35\jre\bin\java.exe CharSetTest
Default Charset=GBK
file.encoding=Latin-1
Default Charset=GBK
Default Charset in Use=GBK
Default 字符集(在使用中的)=GBK
D:\Apps\Java\jdk1.6.0_35\jre\bin\java.exe -Dfile.encoding=GBK
CharSetTest
Default Charset=GBK
file.encoding=Latin-1
Default Charset=GBK
Default Charset in Use=GBK
Default 字符集(在使用中的)=GBK
D:\Apps\Java\jdk1.6.0_35\jre\bin\java.exe
-Dfile.encoding=UTF-8 CharSetTest
Default Charset=UTF-8
file.encoding=Latin-1
Default Charset=UTF-8
Default Charset in Use=UTF8
Default 瀛楃闆嗭紙鍦ㄤ娇鐢ㄤ腑鐨勶級=UTF8
这个结果符合预期,因为文件本身是GBK编码的,使用UTF-8运行会出现乱码,但这个class文件ftp到Linux下运行的结果就比较奇怪了:
/opt/jdk1.6.0_35/bin/java CharSetTest
Default Charset=UTF-8
file.encoding=Latin-1
Default Charset=UTF-8
Default Charset in Use=UTF8
Default 字符集(在使用中的)=UTF8
/opt/jdk1.6.0_35/bin/java -Dfile.encoding=GBK
CharSetTest
Default Charset=GBK
file.encoding=Latin-1
Default Charset=GBK
Default Charset in Use=GBK
Default ؖ·՚ʹԃאµģ©=GBK
/opt/jdk1.6.0_35/bin/java -Dfile.encoding=UTF-8
CharSetTest
Default Charset=UTF-8
file.encoding=Latin-1
Default Charset=UTF-8
Default Charset in Use=UTF8
Default 字符集(在使用中的)=UTF8
为什么指定为GBK会出现乱码,使用UTF-8反而不会?
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
针对这个问题,网上好多同学都议论纷纷,可都没有说对重点。要想自己的眼睛看到是中文,重点在这里:
1、内容以什么编码格式保存。
2、程序以什么编码格式输出内容?
3、显示界面以什么编码格式显示内容?
回到这位同学的问题,不管java文件是什么编码格式,但最终class文件都是unicode格式存储。
ChartSetTest运行时按照指定的字符集输出字符。这里的显示程序其实就是控制台。
1、在window情况下,控制台默认输出是gbk码。操作系统的默认编码也是gbk。
2、在linux下。控制台和操作系统的编码默认都是utf。
前一篇:81建军节看战狼2
后一篇:(转载)gcc与g++的区别

加载中…