java中這個(gè)頁(yè)面默認(rèn)是utf-8編碼的,1輸出亂碼可以理解,可是2就不理解了?
問(wèn)題描述
s按照gbk解碼,在按照gbk組合成String,為什么就不是亂碼了呢? 那2這個(gè)字符串是最終是什么編碼 utf-8還是gbk
問(wèn)題解答
回答1:1:s.getBytes()不帶參數(shù)的話會(huì)調(diào)用jdk默認(rèn)的編碼(你的可能是utf-8)將字符串解碼成byte[],然后你使用gbk的編碼方式重新將byte[]編碼成字符串,所以會(huì)出現(xiàn)亂碼。
2.s.getBytes(’gbk’)你將字符串按照gbk的方式解碼后又重新使用gbk方式編碼,所以不會(huì)出現(xiàn)亂碼。
回答2:樓上說(shuō)的沒(méi)錯(cuò),補(bǔ)充一點(diǎn)jdk的默認(rèn)編碼是file.encoding中指定的編碼,可以通過(guò)Dfile.encoding=GBK這樣來(lái)修改JVM的默認(rèn)編碼。
再補(bǔ)充一點(diǎn)編解碼的知識(shí),“你好”這個(gè)中文要在計(jì)算機(jī)中傳輸,必然要把它轉(zhuǎn)換為2進(jìn)制。怎么轉(zhuǎn)二進(jìn)制就是這里說(shuō)的解碼。編碼的方式有很多種,比如Unicode字符集。這個(gè)字符集里面就是各種符號(hào)對(duì)應(yīng)的數(shù)字,比如你用2345來(lái)表示,然后按照一定的方式轉(zhuǎn)換的二進(jìn)制(具體怎么轉(zhuǎn)換可以網(wǎng)上找一下具體過(guò)程)。接收到這一串二進(jìn)制數(shù),怎么轉(zhuǎn)為漢字就是這里說(shuō)的編碼。編碼需要按照一定的方式去解才能得到正確的字符對(duì)應(yīng)關(guān)系,比如你的二進(jìn)制為0101010010,需要按照utf-8的方式去編碼才能得到你這個(gè)符號(hào)并顯示出來(lái)。
