java中文亂碼解決之道(四)—–java編碼轉(zhuǎn)換過(guò)程

摘要:前面三篇博客側(cè)重介紹字符但骨、編碼問(wèn)題卸勺,通過(guò)這三篇博客各位博友對(duì)各種字符編碼有了一個(gè)初步的了解,要了解java的中文問(wèn)題這是必須要了解的瞎暑。但是了解這些僅僅只是一個(gè)開始彤敛,以下博客將側(cè)重介紹java亂碼是如何產(chǎn)生的、存在哪些亂碼的情況了赌、該如何從根本上解決亂碼問(wèn)題墨榄。

java編碼轉(zhuǎn)換過(guò)程

我們總是用一個(gè)java類文件和用戶進(jìn)行最直接的交互(輸入、輸出)揍拆,這些交互內(nèi)容包含的文字可能會(huì)包含中文渠概。無(wú)論這些java類是與數(shù)據(jù)庫(kù)交互茶凳,還是與前端頁(yè)面交互嫂拴,他們的生命周期總是這樣的:

1、程序員在操作系統(tǒng)上通過(guò)編輯器編寫程序代碼并且以.java的格式保存操作系統(tǒng)中贮喧,這些文件我們稱之為源文件筒狠。

2、通過(guò)JDK中的javac.exe編譯這些源文件形成.class類箱沦。

3辩恼、直接運(yùn)行這些類或者部署在WEB容器中運(yùn)行,得到輸出結(jié)果谓形。

這些過(guò)程是從宏觀上面來(lái)觀察的灶伊,了解這個(gè)肯定是不行的,我們需要真正來(lái)了解java是如何來(lái)編碼和被解碼的:

第一步:當(dāng)我們用編輯器編寫java源文件寒跳,程序文件在保存時(shí)會(huì)采用操作系統(tǒng)默認(rèn)的編碼格式(一般我們中文的操作系統(tǒng)采用的是GBK編碼格式)形成一個(gè).java文件聘萨。java源文件是采用操作系統(tǒng)默認(rèn)支持的file.encoding編碼格式保存的。下面代碼可以查看系統(tǒng)的file.encoding參數(shù)值童太。

System.out.println(System.getProperty("file.encoding"));

第二步:當(dāng)我們使用javac.exe編譯我們的java文件時(shí)米辐,JDK首先會(huì)確認(rèn)它的編譯參數(shù)encoding來(lái)確定源代碼字符集,如果我們不指定該編譯參數(shù)书释,JDK首先會(huì)獲取操作系統(tǒng)默認(rèn)的file.encoding參數(shù)翘贮,然后JDK就會(huì)把我們編寫的java源程序從file.encoding編碼格式轉(zhuǎn)化為JAVA內(nèi)部默認(rèn)的UNICODE格式放入內(nèi)存中。

第三步:JDK將上面編譯好的且保存在內(nèi)存中信息寫入class文件中爆惧,形成.class文件狸页。此時(shí).class文件是Unicode編碼的,也就是說(shuō)我們常見(jiàn)的.class文件中的內(nèi)容無(wú)論是中文字符還是英文字符扯再,他們都已經(jīng)轉(zhuǎn)換為Unicode編碼格式了肴捉。

在這一步中對(duì)對(duì)JSP源文件的處理方式有點(diǎn)兒不同:WEB容器調(diào)用JSP編譯器,JSP編譯器首先會(huì)查看JSP文件是否設(shè)置了文件編碼格式叔收,如果沒(méi)有設(shè)置則JSP編譯器會(huì)調(diào)用調(diào)用JDK采用默認(rèn)的編碼方式將JSP文件轉(zhuǎn)化為臨時(shí)的servlet類齿穗,然后再編譯為.class文件并保持到臨時(shí)文件夾中。

第四步:運(yùn)行編譯的類:在這里會(huì)存在一下幾種情況

1饺律、直接在console上運(yùn)行窃页。

2、JSP/Servlet類。

3脖卖、java類與數(shù)據(jù)庫(kù)之間乒省。

這三種情況每種情況的方式都會(huì)不同,

1.Console上運(yùn)行的類

這種情況下畦木,JVM首先會(huì)把保存在操作系統(tǒng)中的class文件讀入到內(nèi)存中袖扛,這個(gè)時(shí)候內(nèi)存中class文件編碼格式為Unicode,然后JVM運(yùn)行它十籍。如果需要用戶輸入信息蛆封,則會(huì)采用file.encoding編碼格式對(duì)用戶輸入的信息進(jìn)行編碼同時(shí)轉(zhuǎn)換為Unicode編碼格式保存到內(nèi)存中。程序運(yùn)行后勾栗,將產(chǎn)生的結(jié)果再轉(zhuǎn)化為file.encoding格式返回給操作系統(tǒng)并輸出到界面去惨篱。整個(gè)流程如下:


原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市围俘,隨后出現(xiàn)的幾起案子砸讳,更是在濱河造成了極大的恐慌,老刑警劉巖界牡,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件簿寂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡宿亡,警方通過(guò)查閱死者的電腦和手機(jī)常遂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)她混,“玉大人烈钞,你說(shuō)我怎么就攤上這事±ぐ矗” “怎么了毯欣?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)臭脓。 經(jīng)常有香客問(wèn)我酗钞,道長(zhǎng),這世上最難降的妖魔是什么来累? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任砚作,我火速辦了婚禮,結(jié)果婚禮上嘹锁,老公的妹妹穿的比我還像新娘葫录。我一直安慰自己,他們只是感情好领猾,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布米同。 她就那樣靜靜地躺著骇扇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪面粮。 梳的紋絲不亂的頭發(fā)上少孝,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音熬苍,去河邊找鬼稍走。 笑死,一個(gè)胖子當(dāng)著我的面吹牛柴底,可吹牛的內(nèi)容都是我干的婿脸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼似枕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼盖淡!你這毒婦竟也來(lái)了年柠?” 一聲冷哼從身側(cè)響起凿歼,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冗恨,沒(méi)想到半個(gè)月后答憔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掀抹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年虐拓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傲武。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蓉驹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出揪利,到底是詐尸還是另有隱情态兴,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布疟位,位于F島的核電站瞻润,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏甜刻。R本人自食惡果不足惜绍撞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望得院。 院中可真熱鬧傻铣,春花似錦、人聲如沸祥绞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至怪蔑,卻和暖如春里覆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缆瓣。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工喧枷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弓坞。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓隧甚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親渡冻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子戚扳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 前面三篇博客側(cè)重介紹字符、編碼問(wèn)題族吻,通過(guò)這三篇博客各位博友對(duì)各種字符編碼有了一個(gè)初步的了解帽借,要了解java的中文問(wèn)...
    皓云觀閱讀 410評(píng)論 1 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法超歌,內(nèi)部類的語(yǔ)法砍艾,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法巍举,線程的語(yǔ)...
    子非魚_t_閱讀 31,661評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理脆荷,服務(wù)發(fā)現(xiàn),斷路器懊悯,智...
    卡卡羅2017閱讀 134,696評(píng)論 18 139
  • 今天是長(zhǎng)假后的第一天上學(xué)蜓谋,一早上就下起了大雨,周一有我最喜歡上的美術(shù)課炭分。課上我畫的是天津之眼--摩天輪桃焕,它是...
    楊尚峰閱讀 132評(píng)論 0 1
  • 行為方式的與眾不同 世界觀的離經(jīng)叛道 還有保持神秘感
    劉蘋閱讀 982評(píng)論 0 1