亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪(fǎng)問(wèn)板塊 發(fā)新帖
查看: 1216 | 回復(fù): 0
打印 上一主題 下一主題

java中字符之間的轉(zhuǎn)化 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-11-13 16:49 |只看該作者 |倒序?yàn)g覽
1、函數(shù)介紹
在Java中,字符串用統(tǒng)一的Unicode編碼,每個(gè)字符占用兩個(gè)字節(jié),與編碼有關(guān)的兩個(gè)主要函數(shù)為:
1)將字符串用指定的編碼集合解析成字節(jié)數(shù)組,完成Unicode-〉charsetName轉(zhuǎn)換
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

2)將字節(jié)數(shù)組以指定的編碼集合構(gòu)造成字符串,完成charsetName-〉Unicode轉(zhuǎn)換
public String(byte[] bytes, String charsetName) throws UnsupportedEncodingException

2、Unicode與各編碼之間的直接轉(zhuǎn)換
下面以對(duì)中文字符串"a中文"的編碼轉(zhuǎn)換為例,來(lái)了解各種編碼之間的轉(zhuǎn)換
1)Unicode和GBK
測(cè)試結(jié)果如下,每個(gè)漢字轉(zhuǎn)換為兩個(gè)字節(jié),且是可逆的,即通過(guò)字節(jié)可以轉(zhuǎn)換回字符串
String-GBK〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4
ByteArray-GBK〉String:0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u4E2D\u6587(a中文)

2)Unicode和UTF-8
測(cè)試結(jié)果如下,每個(gè)漢字轉(zhuǎn)換為三個(gè)字節(jié),且是可逆的,即通過(guò)字節(jié)可以轉(zhuǎn)換回字符串
String-UTF-8〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87
ByteArray-UTF-8〉String:0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u4E2D\u6587(a中文)
3)Unicode和ISO-8859-1
測(cè)試結(jié)果如下,當(dāng)存在漢字時(shí)轉(zhuǎn)換失敗,非可逆,即通過(guò)字節(jié)不能再轉(zhuǎn)換回字符串
String-ISO-8859-1〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0x3F 0x3F
ByteArray-ISO-8859-1〉String:0x61 0x3F 0x3F-〉\u0061\u003F\u003F(a??)
3、Unicode與各編碼之間的交叉轉(zhuǎn)換
在上面直接轉(zhuǎn)換中,由字符串(Unicode)生成的字節(jié)數(shù)組,在構(gòu)造回字符串時(shí),使用的是正確的編碼集合,如果使用的不是正確的編碼集合會(huì)怎樣呢?會(huì)正確構(gòu)造嗎?如果不能正確構(gòu)造能有辦法恢復(fù)嗎?會(huì)信息丟失嗎?

下面我們就來(lái)看看這種情況,這部分可以說(shuō)明在某些情況下雖然我們最終正確顯示了結(jié)果,但其間仍然進(jìn)行了不正確的轉(zhuǎn)換。

1)能夠正確顯示的中間不正確轉(zhuǎn)換
我們知道String-GBK〉ByteArray-GBK〉String是正確的,但如果我們采用String-GBK〉ByteArray-ISO-8859-1〉String呢?通過(guò)測(cè)試結(jié)果如下:
String-GBK〉ByteArray-ISO-8859-1〉String:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u00D6\u00D0\u00CE\u00C4(a????)

這時(shí)我們得到的字符串為?亂碼“a????”,但是通過(guò)繼續(xù)轉(zhuǎn)換我們?nèi)匀豢梢詮?fù)原回正確的字符串“a中文”,過(guò)程如下:
String-GBK〉ByteArray-ISO-8859-1〉String-ISO-8859-1〉ByteArray-GBK〉String
對(duì)應(yīng):\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u00D6\u00D0\u00CE\u00C4(a????)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u4E2D\u6587(a中文)

也就是我們?cè)谑状螛?gòu)造字符串時(shí),我們用了錯(cuò)誤的編碼集合得到了錯(cuò)誤的亂碼,但是我們通過(guò)錯(cuò)上加錯(cuò),再用錯(cuò)誤的編碼集合獲取字節(jié)數(shù)組,然后再用正確的編碼集合構(gòu)造,就又恢復(fù)了正確的字符串。這時(shí)就屬于是“能夠正確顯示的中間不正確轉(zhuǎn)換”。在Jsp頁(yè)面提交數(shù)據(jù)處理時(shí)常常發(fā)生這種情況。

此外能夠正確顯示的中間不正確轉(zhuǎn)換還有:
String-UTF-8〉ByteArray-ISO-8859-1〉String-ISO-8859-1〉ByteArray-UTF-8〉String

String-UTF-8〉ByteArray-GBK〉String-GBK〉ByteArray-UTF-8〉String
對(duì)應(yīng):\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u6D93\uE15F\u6783(a涓枃)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u4E2D\u6587(a中文)

4、編碼過(guò)程中錯(cuò)誤診斷參考
1)一個(gè)漢字對(duì)應(yīng)一個(gè)問(wèn)號(hào)
在通過(guò)ISO-8859-1從字符串獲取字節(jié)數(shù)組時(shí),由于一個(gè)Unicode轉(zhuǎn)換成一個(gè)byte,當(dāng)遇到不認(rèn)識(shí)的Unicode時(shí),轉(zhuǎn)換為0x3F,這樣無(wú)論用哪種編碼構(gòu)造時(shí)都會(huì)產(chǎn)生一個(gè)?亂碼。
2)一個(gè)漢字對(duì)應(yīng)兩個(gè)問(wèn)號(hào)
在通過(guò)GBK從字符串獲取字節(jié)數(shù)組時(shí),由于一個(gè)Unicode轉(zhuǎn)換成兩個(gè)byte,如果此時(shí)用ISO-8859-1或用UTF-8構(gòu)造字符串就會(huì)出現(xiàn)兩個(gè)問(wèn)號(hào)。
若是通過(guò)ISO-8859-1構(gòu)造可以再通過(guò)上面所說(shuō)的錯(cuò)上加錯(cuò)恢復(fù)(即再通過(guò)從ISO-8859-1解析,用GBK構(gòu)造);
若是通過(guò)UTF-8構(gòu)造則會(huì)產(chǎn)生Unicode字符"\uFFFD",不能恢復(fù),若再通過(guò)String-UTF-8〉ByteArray-GBK〉String,則會(huì)出現(xiàn)雜碼,如a錕斤拷錕斤拷
3)一個(gè)漢字對(duì)應(yīng)三個(gè)問(wèn)號(hào)
在通過(guò)UTF-8從字符串獲取字節(jié)數(shù)組時(shí),由于一個(gè)Unicode轉(zhuǎn)換成三個(gè)byte,如果此時(shí)用ISO-8859-1構(gòu)造字符串就會(huì)出現(xiàn)三個(gè)問(wèn)號(hào);用GBK構(gòu)造字符串就會(huì)出現(xiàn)雜碼,如a涓?枃。


本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u2/85344/showart_1412558.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP