很多小伙伴在學(xué)習(xí)編程的時(shí)候會(huì)出現(xiàn)相互之間互相借鑒代碼參考的現(xiàn)象(借鑒學(xué)習(xí)是好事,但是代碼抄襲是對(duì)別人勞動(dòng)成果的否定)。但是有些時(shí)候代碼拷貝過(guò)來(lái)一看確傻了眼,很多字符都出現(xiàn)了奇奇怪怪的亂碼,有些則是一片一片的方塊,這就是代碼亂碼,那么代碼亂碼怎么解決呢?且聽(tīng)小編細(xì)細(xì)分解。
出現(xiàn)亂碼的原因——字符集
眾所周知,計(jì)算機(jī)只認(rèn)識(shí)0和1,不認(rèn)識(shí)其他的字,但是我們最后要讓計(jì)算機(jī)顯示字,所以我們用一個(gè)字節(jié)(八位,有256種狀態(tài))來(lái)表示一個(gè)字符。對(duì)于英語(yǔ)國(guó)家而言,他們使用的字母只有26個(gè),算上大寫,加上數(shù)字,再加上一些標(biāo)點(diǎn)符號(hào)和一些特殊處理,使用128位足夠表示他們需要表示的所有內(nèi)容了。于是他們?cè)O(shè)計(jì)出了ASCII碼表,并且廣為使用。
但是這個(gè)世界上并不是只有英文,還有中文,日文,韓文等文字,這些文字ASCII碼表并沒(méi)有對(duì)應(yīng)的數(shù)值,所以很多文種都發(fā)展了專屬的字符集。以中文為例子,我們發(fā)展出了gb2312以及gbk(gb2312的進(jìn)階版)兩種字符集,它采用兩個(gè)字節(jié)(一個(gè)字節(jié)沒(méi)有辦法表示所有漢字)而且兼容ASCII碼。
再往后因?yàn)楦鱾€(gè)國(guó)家都有對(duì)應(yīng)的字符集,會(huì)照成使用上的混亂,這時(shí)候Unicode出現(xiàn)了,它又被稱為萬(wàn)國(guó)碼,他可以表示所有語(yǔ)言的所有文字,其中最出名的是UTF-8,這是一種可變字節(jié)長(zhǎng)度的編碼,最長(zhǎng)可以達(dá)到4字節(jié)。同樣的,他也兼容ASCII碼。
為什么會(huì)出現(xiàn)亂碼——字符集選用錯(cuò)誤
剛才介紹了三種字符集,其中有兩種都有涉及到中文,也就是接下來(lái)我們的主角:utf-8和gbk(gb2312暫不做討論)。
小編這里設(shè)定了兩組對(duì)照試驗(yàn)以幫助各位讀者了解亂碼的原因:
使用utf-8編碼的文件(亂碼更多的是一些奇形怪狀的文字):
使用gbk編碼的文件(亂碼多為方片中帶有一個(gè)問(wèn)號(hào)):
可以發(fā)現(xiàn),這兩種字符集如果選擇錯(cuò)誤的話,使用對(duì)方的字符集讀取文件都會(huì)導(dǎo)致亂碼。上述結(jié)果也給我們帶來(lái)了亂碼的一種簡(jiǎn)單的判斷方式——根據(jù)亂碼的情況判斷應(yīng)該使用什么字符集。
解決方法
出現(xiàn)亂碼不要慌,只需要選擇使用對(duì)應(yīng)的正確方法重新打開就可以了。這里切記,千萬(wàn)不要點(diǎn)保存。因?yàn)橐驗(yàn)辄c(diǎn)完保存后編輯器會(huì)把亂碼以對(duì)應(yīng)的格式保存,這樣子這些亂碼就只能是亂碼,無(wú)法恢復(fù)了。
小編建議
其實(shí)從上面的結(jié)果還能得出一個(gè)結(jié)論:不管怎么亂碼,ASCII碼不會(huì)亂,之前字符集的介紹中也有提起。所以,如果注釋使用英文,就不會(huì)出現(xiàn)亂碼。就算必須使用中文,也可以在文件開頭用英文注明該代碼使用的字符集,方便后來(lái)者的閱讀(這點(diǎn)python就做得比java好,默認(rèn)使用utf-8)。
小結(jié)
以上就是關(guān)于代碼亂碼怎么解決的方法,更多編程小問(wèn)題的解決,關(guān)注W3C技術(shù)頭條,小編幫你解決!