程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> J2me 手機項目編碼問題解決方案

J2me 手機項目編碼問題解決方案

編輯:J2ME

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[]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved