App下載

編碼字符集對編程的影響——代碼亂碼怎么解決

猿友 2021-06-18 16:19:49 瀏覽數(shù) (4674)
反饋

很多小伙伴在學(xué)習(xí)編程的時(shí)候會(huì)出現(xiàn)相互之間互相借鑒代碼參考的現(xiàn)象(借鑒學(xué)習(xí)是好事,但是代碼抄襲是對別人勞動(dòng)成果的否定)。但是有些時(shí)候代碼拷貝過來一看確傻了眼,很多字符都出現(xiàn)了奇奇怪怪的亂碼,有些則是一片一片的方塊,這就是代碼亂碼,那么代碼亂碼怎么解決呢?且聽小編細(xì)細(xì)分解。

出現(xiàn)亂碼的原因——字符集

眾所周知,計(jì)算機(jī)只認(rèn)識(shí)0和1,不認(rèn)識(shí)其他的字,但是我們最后要讓計(jì)算機(jī)顯示字,所以我們用一個(gè)字節(jié)(八位,有256種狀態(tài))來表示一個(gè)字符。對于英語國家而言,他們使用的字母只有26個(gè),算上大寫,加上數(shù)字,再加上一些標(biāo)點(diǎn)符號(hào)和一些特殊處理,使用128位足夠表示他們需要表示的所有內(nèi)容了。于是他們設(shè)計(jì)出了ASCII碼表,并且廣為使用。

ASCII碼表

但是這個(gè)世界上并不是只有英文,還有中文,日文,韓文等文字,這些文字ASCII碼表并沒有對應(yīng)的數(shù)值,所以很多文種都發(fā)展了專屬的字符集。以中文為例子,我們發(fā)展出了gb2312以及gbk(gb2312的進(jìn)階版)兩種字符集,它采用兩個(gè)字節(jié)(一個(gè)字節(jié)沒有辦法表示所有漢字)而且兼容ASCII碼。

再往后因?yàn)楦鱾€(gè)國家都有對應(yīng)的字符集,會(huì)照成使用上的混亂,這時(shí)候Unicode出現(xiàn)了,它又被稱為萬國碼,他可以表示所有語言的所有文字,其中最出名的是UTF-8,這是一種可變字節(jié)長度的編碼,最長可以達(dá)到4字節(jié)。同樣的,他也兼容ASCII碼。

為什么會(huì)出現(xiàn)亂碼——字符集選用錯(cuò)誤

剛才介紹了三種字符集,其中有兩種都有涉及到中文,也就是接下來我們的主角:utf-8和gbk(gb2312暫不做討論)。

小編這里設(shè)定了兩組對照試驗(yàn)以幫助各位讀者了解亂碼的原因:

使用utf-8編碼的文件(亂碼更多的是一些奇形怪狀的文字):

utf-8編碼文件

使用gbk編碼的文件(亂碼多為方片中帶有一個(gè)問號(hào)):

GBK編碼

可以發(fā)現(xiàn),這兩種字符集如果選擇錯(cuò)誤的話,使用對方的字符集讀取文件都會(huì)導(dǎo)致亂碼。上述結(jié)果也給我們帶來了亂碼的一種簡單的判斷方式——根據(jù)亂碼的情況判斷應(yīng)該使用什么字符集。

解決方法

出現(xiàn)亂碼不要慌,只需要選擇使用對應(yīng)的正確方法重新打開就可以了。這里切記,千萬不要點(diǎn)保存。因?yàn)橐驗(yàn)辄c(diǎn)完保存后編輯器會(huì)把亂碼以對應(yīng)的格式保存,這樣子這些亂碼就只能是亂碼,無法恢復(fù)了。

小編建議

其實(shí)從上面的結(jié)果還能得出一個(gè)結(jié)論:不管怎么亂碼,ASCII碼不會(huì)亂,之前字符集的介紹中也有提起。所以,如果注釋使用英文,就不會(huì)出現(xiàn)亂碼。就算必須使用中文,也可以在文件開頭用英文注明該代碼使用的字符集,方便后來者的閱讀(這點(diǎn)python就做得比java好,默認(rèn)使用utf-8)。

小結(jié)

以上就是關(guān)于代碼亂碼怎么解決的方法,更多編程小問題的解決,關(guān)注W3C技術(shù)頭條,小編幫你解決!


0 人點(diǎn)贊