centos java 乱码,linux(centos7)下程序中文输出乱码问题的解决
目前的程序代碼都是在window編寫,編碼格式為GBK。轉(zhuǎn)移到linux下,編譯正常,在控制臺(tái)運(yùn)行時(shí)中文輸出為亂碼。查linux的LANG發(fā)現(xiàn)為UTF-8,于是修改為GBK。再次運(yùn)行程序,依然為亂碼。百思不得其解,查各種資料,也都是在LANG等各種配置上解決,可我已經(jīng)修改了,而且桌面、菜單上的中文都顯示正常。問題出現(xiàn)在哪里?靈感來了擋不住,我突然想可能是控制臺(tái)本身是否有編碼配置呢?檢查終端控制臺(tái)的菜單項(xiàng),果然有一個(gè)編碼項(xiàng),其設(shè)置的正好為UTF-8.修改為GBK以后,再次運(yùn)行程序,中文輸出正常。
在為解決上述問題查資料的過程中,發(fā)現(xiàn)有位同學(xué)提了一個(gè)這樣的問題:
CharSetTest.java文件內(nèi)容如下,在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上運(yùn)行:
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 瀛楃闆嗭紙鍦ㄤ嬌鐢ㄤ腑鐨勶級(jí)=UTF8
這個(gè)結(jié)果符合預(yù)期,因?yàn)槲募旧硎荊BK編碼的,使用UTF-8運(yùn)行會(huì)出現(xiàn)亂碼,但這個(gè)class文件ftp到Linux下運(yùn)行的結(jié)果就比較奇怪了:
/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會(huì)出現(xiàn)亂碼,使用UTF-8反而不會(huì)?
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
針對(duì)這個(gè)問題,網(wǎng)上好多同學(xué)都議論紛紛,可都沒有說對(duì)重點(diǎn)。要想自己的眼睛看到是中文,重點(diǎn)在這里:
1、內(nèi)容以什么編碼格式保存。
2、程序以什么編碼格式輸出內(nèi)容?
3、顯示界面以什么編碼格式顯示內(nèi)容?
回到這位同學(xué)的問題,不管java文件是什么編碼格式,但最終class文件都是unicode格式存儲(chǔ)。
ChartSetTest運(yùn)行時(shí)按照指定的字符集輸出字符。這里的顯示程序其實(shí)就是控制臺(tái)。
1、在window情況下,控制臺(tái)默認(rèn)輸出是gbk碼。操作系統(tǒng)的默認(rèn)編碼也是gbk。
所以在運(yùn)行程序時(shí)不指定編碼以及指定編碼為gbk。中文輸出都正常。但是指定編碼為utf8時(shí),
則程序則會(huì)輸出utf8字符,但控制臺(tái)則會(huì)以gbk顯示,結(jié)果出現(xiàn)亂碼。
2、在linux下。控制臺(tái)和操作系統(tǒng)的編碼默認(rèn)都是utf。
所以在運(yùn)行程序時(shí)不指定編碼以及指定編碼為utf8。中文輸出都正常。但是指定編碼為gbk時(shí),
則程序則會(huì)輸出gbk字符,但控制臺(tái)則會(huì)以u(píng)tf8顯示,結(jié)果出現(xiàn)亂碼。
總結(jié)
以上是生活随笔為你收集整理的centos java 乱码,linux(centos7)下程序中文输出乱码问题的解决的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea maven无法从私服下载jar
- 下一篇: linux 其他常用命令