日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

centos java 乱码,linux(centos7)下程序中文输出乱码问题的解决

發(fā)布時(shí)間:2024/3/12 linux 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 centos java 乱码,linux(centos7)下程序中文输出乱码问题的解决 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目前的程序代碼都是在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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。