欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Java字符集編碼研究2
第二篇:JAVA字符編碼系列二:Unicode,ISO-8859-1,GBK,UTF-8編碼及相互轉換
 
1、函數介紹
在Java中,字符串用統一的Unicode編碼,每個(gè)字符占用兩個(gè)字節,與編碼有關(guān)的兩個(gè)主要函數為:
1)將字符串用指定的編碼集合解析成字節數組,完成Unicode-〉charsetName轉換
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 
 
2)將字節數組以指定的編碼集合構造成字符串,完成charsetName-〉Unicode轉換
public String(byte[] bytes, String charsetName) throws UnsupportedEncodingException
 
2、Unicode與各編碼之間的直接轉換
下面以對中文字符串"a中文"的編碼轉換為例,來(lái)了解各種編碼之間的轉換
1)Unicode和GBK
測試結果如下,每個(gè)漢字轉換為兩個(gè)字節,且是可逆的,即通過(guò)字節可以轉換回字符串
StringGBKByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4
ByteArrayGBKString:0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u4E2D\u6587(a中文)
 
2)Unicode和UTF-8
測試結果如下,每個(gè)漢字轉換為三個(gè)字節,且是可逆的,即通過(guò)字節可以轉換回字符串
StringUTF-8ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87
ByteArrayUTF-8String:0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u4E2D\u6587(a中文)
3)Unicode和ISO-8859-1
測試結果如下,當存在漢字時(shí)轉換失敗,非可逆,即通過(guò)字節不能再轉換回字符串
StringISO-8859-1ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0x3F 0x3F
ByteArrayISO-8859-1String:0x61 0x3F 0x3F-〉\u0061\u003F\u003F(a??)
3、Unicode與各編碼之間的交叉轉換
在上面直接轉換中,由字符串(Unicode)生成的字節數組,在構造回字符串時(shí),使用的是正確的編碼集合,如果使用的不是正確的編碼集合會(huì )怎樣呢?會(huì )正確構造嗎?如果不能正確構造能有辦法恢復嗎?會(huì )信息丟失嗎?
 
下面我們就來(lái)看看這種情況,這部分可以說(shuō)明在某些情況下雖然我們最終正確顯示了結果,但其間仍然進(jìn)行了不正確的轉換。
 
1)能夠正確顯示的中間不正確轉換
我們知道StringGBKByteArrayGBKString是正確的,但如果我們采用StringGBKByteArrayISO-8859-1String呢?通過(guò)測試結果如下:
StringGBKByteArrayISO-8859-1String:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u00D6\u00D0\u00CE\u00C4(a????)
 
這時(shí)我們得到的字符串為?亂碼“a????”,但是通過(guò)繼續轉換我們仍然可以復原回正確的字符串“a中文”,過(guò)程如下:
StringGBKByteArrayISO-8859-1StringISO-8859-1ByteArrayGBKString
對應:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE0xC4-〉\u0061\u00D6\u00D0\u00CE\u00C4(a????)-〉0x61 0xD6 0xD0 0xCE0xC4-〉\u0061\u4E2D\u6587(a中文)
 
也就是我們在首次構造字符串時(shí),我們用了錯誤的編碼集合得到了錯誤的亂碼,但是我們通過(guò)錯上加錯,再用錯誤的編碼集合獲取字節數組,然后再用正確的編碼集合構造,就又恢復了正確的字符串。這時(shí)就屬于是“能夠正確顯示的中間不正確轉換”。在Jsp頁(yè)面提交數據處理時(shí)常常發(fā)生這種情況。
 
此外能夠正確顯示的中間不正確轉換還有:
StringUTF-8ByteArrayISO-8859-1StringISO-8859-1ByteArrayUTF-8String
StringUTF-8ByteArrayGBKStringGBKByteArrayUTF-8String
對應:\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x960x87-〉\u0061\u6D93\uE15F\u6783(a涓枃)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x960x87-〉\u0061\u4E2D\u6587(a中文)
 
4、編碼過(guò)程中錯誤診斷參考
1)一個(gè)漢字對應一個(gè)問(wèn)號
在通過(guò)ISO-8859-1從字符串獲取字節數組時(shí),由于一個(gè)Unicode轉換成一個(gè)byte,當遇到不認識的Unicode時(shí),轉換為0x3F,這樣無(wú)論用哪種編碼構造時(shí)都會(huì )產(chǎn)生一個(gè)?亂碼。
2)一個(gè)漢字對應兩個(gè)問(wèn)號
在通過(guò)GBK從字符串獲取字節數組時(shí),由于一個(gè)Unicode轉換成兩個(gè)byte,如果此時(shí)用ISO-8859-1或用UTF-8構造字符串就會(huì )出現兩個(gè)問(wèn)號。
若是通過(guò)ISO-8859-1構造可以再通過(guò)上面所說(shuō)的錯上加錯恢復(即再通過(guò)從ISO-8859-1解析,用GBK構造);
若是通過(guò)UTF-8構造則會(huì )產(chǎn)生Unicode字符"\uFFFD",不能恢復,若再通過(guò)String-UTF-8〉ByteArray-GBK〉String,則會(huì )出現雜碼,如a錕斤拷錕斤拷
3)一個(gè)漢字對應三個(gè)問(wèn)號
在通過(guò)UTF-8從字符串獲取字節數組時(shí),由于一個(gè)Unicode轉換成三個(gè)byte,如果此時(shí)用ISO-8859-1構造字符串就會(huì )出現三個(gè)問(wèn)號;用GBK構造字符串就會(huì )出現雜碼,如a涓枃。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
java中文GBK和UTF-8編碼轉換亂碼的分析
java字符串的各種編碼轉換類(lèi)ChangeCharset
中文化和國際化問(wèn)題權威解析之二:Java國際化基礎
深入分析 Java 中的中文編碼問(wèn)題
字符串的編碼解碼
java 中String編碼和byte 解碼 總結
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久