国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

J2ME中文問題的解決方案

2019-11-18 16:09:05
字體:
來源:轉載
供稿:網友
    java的中文問題通常會困擾很多開發者,你可能在開發Web應用程序的時候遇到中文參數的傳遞問題,最后你可能選擇使用Filter把Request的編碼方式設置為GBK來解決。在J2ME的開發中我們同樣會遇到中文問題,比如在RMS中存儲中文、網絡傳輸中傳輸中文、從文件中讀取中文等問題。

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

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

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

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

        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;
    }

(出處:http://www.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 卢龙县| 曲水县| 陆河县| 靖远县| 建平县| 永新县| 繁峙县| 凤台县| 泗阳县| 来宾市| 德庆县| 和静县| 冀州市| 深泽县| 得荣县| 胶州市| 勃利县| 方山县| 都匀市| 抚远县| 来凤县| 江川县| 莱州市| 平昌县| 丹东市| 共和县| 那坡县| 当阳市| 镇坪县| 延庆县| 繁峙县| 山丹县| 保山市| 高青县| 叶城县| 河东区| 神池县| 贵南县| 巧家县| 辉县市| 湘阴县|