J2ME 手機項目編碼問題解決方案
問題描述:
要把 【數字串(strID)+漢字串(strName)+圖片數據 】的字節數組作為一個record,保存到手機的RMS(Record Stroe Manger,傳說中手機的數據庫)中。
當取出時,出現亂碼。(在電腦的模擬器下運行正常,但是在手機中出現亂碼異常)
分析:
1,是漢字轉換成字節時,出現了亂碼。
2,根本原因是手機的默認編碼是iso-8859-1(Latin-1)
電腦的中文操作系統的編碼是cp936(gbk)
Java中字符串的編碼(匯編之後可以看到)是unicode(即utf-16LE)
嘗試一:
把上述的合成的字符串(即 strID+strName+圖片數據字符串)轉換成UTF-8,
使用方法:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream DOS = new DataOutputStream(baos);
DOS.writeUTF(myString); byte[] data = baos.toByteArray();
rs.addRecord(data,0,data.length);
測試結果:還是亂碼。
分析 :在writeUTF(String )方法的實現中,如果字符串過長,則會出現DataFormatException.
通常情況下,用writeUTF方法得到的數組的前兩個字節, 00 AA-------字符串實際字節數組的長度。所以字符串不能太長,< 65535(2的16次方)。
嘗試二(解決方案):
new 創建一個字節數組,它的長度=100+圖片數據字節的長度
其中100,足以容納 StrID+strName了。
String strLeading=strID+strName;
Byte [] bytesLeading=strLeading.getBytes("UTF-8")
####### 偽碼 Byte [] bytesStore= bytesLeading[] + bytesPicData[]