konhon

          忘掉過去,展望未來。找回自我,超越自我。
          逃避不一定躲的過, 面對不一定最難過, 孤單不一定不快樂, 得到不一定能長久, 失去不一定不再擁有, 可能因為某個理由而傷心難過, 但我卻能找個理由讓自己快樂.

          Google

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks

          Java的中文問題通常會困擾很多開發(fā)者,你可能在開發(fā)Web應用程序的時候遇到中文參數(shù)的傳遞問題,最后你可能選擇使用Filter把Request的編碼方式設置為GBK來解決。在J2ME的開發(fā)中我們同樣會遇到中文問題,比如在RMS中存儲中文、網絡傳輸中傳輸中文、從文件中讀取中文等問題。

              我們在解決中文問題的時候,用到的最多的一個詞就是UTF-8。我們知道ASCII碼是單字節(jié)編碼方式,可以解決英文的問題,但是中文的字庫非常龐大,用ASSII碼就難以解決了。Java語言是支持UNICODE編碼方式的,UNICODE是雙字節(jié)的編碼方式可以支持中文字庫,但是這多少帶來一些浪費,因為并不是所有的字符串都是非英文字符的。UTF-8編碼方式正好可以解決這個問題,只有當字符不是ASSII碼的時候他采用雙字節(jié)來表示,這樣就節(jié)省了空間。這里我只總結了三種J2ME常見的中文問題。


          網絡傳輸中的中文問題
              解決這個問題的關鍵是我們不采用InputStream或者OutputStream提供的方法按照字節(jié)來傳遞數(shù)據,而是把InputStream或者OutputStream封裝為DataInputStream和DataOutputStream。這樣我們就可以使用DataOutputStream中的writeUTF(String s)來送出數(shù)據了,同時可以使用DataInputStream提供的readUTF()來讀入數(shù)據。注意在這兩個方法搭配使用的時候要注意順序。比如我們在聯(lián)網的時候可能寫出這樣的代碼
            
              客戶端
            dos.writeInt(myint);
              dos.writeByte(mybyte);
              dos.writeUTF(myString);

              服務器端
              int i = dis.readInt();
              byte b = dis.readByte();
              String s = dis.readUTF();  
          RMS持久性存儲的中文問題
              由于RMS中的數(shù)據存儲都是按照byte[]的格式存儲的,因此我們需要稍微變化一下,但是基本上還是走UTF-8的思路。
              
              寫入數(shù)據
              ByteArrayOutputStream baos = new ByteArrayOutputStream();
              DataOutputStream dos = new DataOutputStream(baos);
              dos.writeUTF(myString);
              byte[] data = baos.toByteArray();
              rs.addRecord(data,0,data.length);

              讀出數(shù)據
              byte[] data = rs.getRecord(index);
              ByteArrayInputStream bais = new ByteArrayInputStream(data);
              DataInputStream dis = new DataInputStream(bais);
              String myString = dis.readUTF();
          讀取中文文件的問題
          在MIDP中并不支持文件系統(tǒng),但是我們可以讀取jar包中的文件。如果文件中含有中文,那么我們需要進行一些特殊的處理,首先我們使用UE或者Notepad工具把相關的文件轉換文UTF-8格式編碼。我們在讀取文件的時候需要進行如下的簡單處理。下面是處理函數(shù)。

              public String readFromFile(String fileName)
              {
                  String returnString = null;
                  InputStream is = getClass().getResourceAsStream(fileName);
                  if (is != null)
                  {
                      ByteArrayOutputStream baos = new ByteArrayOutputStream();
                      int ch = 0;
                      try
                      {
                          while ((ch = is.read()) != -1)
                          {
                              baos.write(ch);
                          }
                          byte[] data = baos.toByteArray();
                          returnString = new String(data, "UTF-8");
                          is.close();
                          baos.close();

                      } catch (IOException e)
                      {
                          e.printStackTrace();
                      }
                  }
                  return returnString;
              }

          posted on 2005-09-05 03:11 konhon 優(yōu)華 閱讀(442) 評論(0)  編輯  收藏 所屬分類: J2me
          主站蜘蛛池模板: 彭泽县| 榆中县| 尉犁县| 吉林省| 靖远县| 韶山市| 彩票| 竹北市| 合作市| 攀枝花市| 凤翔县| 桂平市| 永福县| 马鞍山市| 库尔勒市| 荥经县| 舟山市| 顺平县| 灵宝市| 和硕县| 河南省| 全州县| 鹿泉市| 肥西县| 旺苍县| 阿克苏市| 讷河市| 万载县| 房山区| 卢龙县| 大石桥市| 泰州市| 陆河县| 昌都县| 乃东县| 阳谷县| 南城县| 尚志市| 子洲县| 安福县| 辽阳市|