centos java 乱码,linux(centos7)下程序中文输出乱码问题的解决
目前的程序代碼都是在window編寫,編碼格式為GBK。轉移到linux下,編譯正常,在控制臺運行時中文輸出為亂碼。查linux的LANG發(fā)現(xiàn)為UTF-8,于是修改為GBK。再次運行程序,依然為亂碼。百思不得其解,查各種資料,也都是在LANG等各種配置上解決,可我已經修改了,而且桌面、菜單上的中文都顯示正常。問題出現(xiàn)在哪里?靈感來了擋不住,我突然想可能是控制臺本身是否有編碼配置呢?檢查終端控制臺的菜單項,果然有一個編碼項,其設置的正好為UTF-8.修改為GBK以后,再次運行程序,中文輸出正常。
在為解決上述問題查資料的過程中,發(fā)現(xiàn)有位同學提了一個這樣的問題:
CharSetTest.java文件內容如下,在Windows下編譯為class文件。
import java.nio.charset.Charset;
import java.io.OutputStreamWriter;
import java.io.ByteArrayOutputStream;
public class CharSetTest {
public static void
main(String[] args) {
System.out.println("Default Charset=" +
Charset.defaultCharset());
System.setProperty("file.encoding",
"Latin-1");
System.out.println("file.encoding=" +
System.getProperty("file.encoding"));
System.out.println("Default Charset=" +
Charset.defaultCharset());
System.out.println("Default Charset in Use=" +
getDefaultCharSet());
System.out.println("Default 字符集(在使用中的)=" +
getDefaultCharSet());
}
private static String
getDefaultCharSet() {
OutputStreamWriter writer = new
OutputStreamWriter(new ByteArrayOutputStream());
String enc = writer.getEncoding();
return enc;
}
}
首先在本地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運行會出現(xiàn)亂碼,但這個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會出現(xiàn)亂碼,使用UTF-8反而不會?
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
針對這個問題,網上好多同學都議論紛紛,可都沒有說對重點。要想自己的眼睛看到是中文,重點在這里:
1、內容以什么編碼格式保存。
2、程序以什么編碼格式輸出內容?
3、顯示界面以什么編碼格式顯示內容?
回到這位同學的問題,不管java文件是什么編碼格式,但最終class文件都是unicode格式存儲。
ChartSetTest運行時按照指定的字符集輸出字符。這里的顯示程序其實就是控制臺。
1、在window情況下,控制臺默認輸出是gbk碼。操作系統(tǒng)的默認編碼也是gbk。
所以在運行程序時不指定編碼以及指定編碼為gbk。中文輸出都正常。但是指定編碼為utf8時,
則程序則會輸出utf8字符,但控制臺則會以gbk顯示,結果出現(xiàn)亂碼。
2、在linux下。控制臺和操作系統(tǒng)的編碼默認都是utf。
所以在運行程序時不指定編碼以及指定編碼為utf8。中文輸出都正常。但是指定編碼為gbk時,
則程序則會輸出gbk字符,但控制臺則會以utf8顯示,結果出現(xiàn)亂碼。
總結
以上是生活随笔為你收集整理的centos java 乱码,linux(centos7)下程序中文输出乱码问题的解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea maven无法从私服下载jar
- 下一篇: 初入Linux,M35作业第二弹,牛刀小