當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 安卓程序解決網(wǎng)絡(luò)傳輸亂碼問(wèn)題
網(wǎng)絡(luò)傳輸是安卓程序中極其重要的一個(gè)環(huán)節(jié),特別是物聯(lián)網(wǎng)的應(yīng)用中,從節(jié)點(diǎn)采集數(shù)據(jù),顯示數(shù)據(jù),再向節(jié)點(diǎn)發(fā)送數(shù)據(jù)。
一般情況下,向節(jié)點(diǎn)發(fā)送的命令都是由字符串拼接而成,而節(jié)點(diǎn)地址卻不同,在網(wǎng)絡(luò)中是以字節(jié)流的方式進(jìn)行傳輸,這就涉及到了一些轉(zhuǎn)碼方面的知識(shí),這里不做深入地講解,只是簡(jiǎn)單介紹一下byte類型轉(zhuǎn)換成string類型中間解決亂碼問(wèn)題的方法。
在實(shí)際項(xiàng)目中,傳輸一般的地址并不需要進(jìn)行特殊的轉(zhuǎn)換,但是當(dāng)byte類型中高位是1的時(shí)候有可能會(huì)在接收端收到非正確的多余字符,這是由于網(wǎng)絡(luò)傳輸中轉(zhuǎn)碼產(chǎn)生的問(wèn)題。
Java使用的是unicode型的字符,與C語(yǔ)言接收到的ascii編碼有一定的區(qū)別,所以,我們?cè)诎l(fā)送的時(shí)候一定要做一些處理,如下代碼顯示:
return new String(temp2, "ISO8859-1");
其中temp2是byte類型的數(shù)組,ISO/IEC8859-1,又稱Latin-1或“西歐語(yǔ)言”,是標(biāo)準(zhǔn)化組織內(nèi)ISO/IEC 8859的第一個(gè)8位字符集。
發(fā)送的代碼如下所示:
out = new DataOutputStream(socket.getOutputStream());
out.write(data.getBytes("ISO8859-1"));
插入字符串的時(shí)候使用"ISO8859-1"編碼方式來(lái)轉(zhuǎn)換編碼,發(fā)送的時(shí)候再使用"ISO8859-1"方式把字符串類型轉(zhuǎn)換回來(lái),這樣發(fā)送就能解決亂碼的問(wèn)題。