• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 2, 文章 - 73, 評論 - 60, 引用 - 0
            數據加載中……

            有關手機中文問題傳輸的解決辦法

            服務器到客戶端:
            ----------------------------------------------------------------------
            下面代碼是服務器端把字符寫到Client端,經過gbEncoding()方法,所有的字符編碼成:\uXXXX.
            ----------------------------------------------------------------------


            代碼:--------------------------------------------------------------------------------
            /**
            * Write the String data
            *
            * @param out
            * @param value
            */
            public static void writeUnicode(final DataOutputStream out, final String value) throws ActionException {
            try {
            final String unicode = StringFormatter.gbEncoding( value );
            final byte[] data = unicode.getBytes();
            final int dataLength = data.length;

            System.out.println( "Data Length is: " + dataLength );
            System.out.println( "Data is: " + value );
            out.writeInt( dataLength );
            out.write( data, 0, dataLength );
            } catch (IOException e) {
            throw new ActionException( IMDefaultAction.class.getName(), e.getMessage() );
            }
            }
            --------------------------------------------------------------------------------

            ----------------------------------------------------------------------
            以下代碼是gbEncoding()方法,把雙字節字符轉換成\uXXXX,ASIIC碼在前面補00。
            ----------------------------------------------------------------------
            /**
            * This method will encode the String to unicode.
            *
            * @param gbString
            * @return
            */

            代碼:--------------------------------------------------------------------------------
            public static String gbEncoding( final String gbString ) {
            char[] utfBytes = gbString.toCharArray();
            String unicodeBytes = "";
            for( int byteIndex = 0; byteIndex < utfBytes.length; byteIndex ++ ) {
            String hexB = Integer.toHexString( utfBytes[ byteIndex ] );
            if( hexB.length() <= 2 ) {
            hexB = "00" + hexB;
            }
            unicodeBytes = unicodeBytes + "\u" + hexB;
            }
            System.out.println( "unicodeBytes is: " + unicodeBytes );
            return unicodeBytes;
            }
            --------------------------------------------------------------------------------

            ----------------------------------------------------------------------
            在客戶端收到服務器的數據,先將其一個一個字符解碼。雙字節顯示正常。
            ----------------------------------------------------------------------

            代碼:--------------------------------------------------------------------------------
            /**
            * This method will decode the String to a recognized String
            * in ui.
            * @param dataStr
            * @return
            */
            private StringBuffer decodeUnicode( final String dataStr ) {
            int start = 0;
            int end = 0;
            final StringBuffer buffer = new StringBuffer();
            while( start > -1 ) {
            end = dataStr.indexOf( "\u", start + 2 );
            String charStr = "";
            if( end == -1 ) {
            charStr = dataStr.substring( start + 2, dataStr.length() );
            } else {
            charStr = dataStr.substring( start + 2, end);
            }
            char letter = (char) Integer.parseInt( charStr, 16 ); // 16進制parse整形字符串。
            buffer.append( new Character( letter ).toString() );
            start = end;
            }
            return buffer;
            }
            --------------------------------------------------------------------------------

            ----------------------------------------------------------------------
            客戶端到服務器:
            ----------------------------------------------------------------------
            客戶端使用下面方法把手機端的字符編碼成ISO-8859-1,傳給服務器。
            ----------------------------------------------------------------------

            代碼:--------------------------------------------------------------------------------
            /**
            * write the String data
            * @param value
            * @param outData
            */
            private void writeSjis(DataOutputStream outData, String value) {
            try {
            byte[] data = null;
            // data = ( value ).getBytes( "UTF-8" );
            data = ( value ).getBytes( "ISO8859_1" );
            outData.writeInt(data.length);
            outData.write(data, 0, data.length);

            System.out.println(" data.length: " + data.length);
            System.out.println(" data.value: " + value);
            } catch (Exception ex) {
            System.out.println(" write error ");
            ex.printStackTrace();
            }
            }
            --------------------------------------------------------------------------------

            ----------------------------------------------------------------------
            服務器端收到客戶端字符流,是用下面方法將其轉為UTF-8,以后的操作都是基于UTF-8編碼。SQLServer可能會由于內嗎不通有不同的變換,所以存取數據庫是還要是具體的DB內碼作相應的處理。
            ----------------------------------------------------------------------

            代碼:--------------------------------------------------------------------------------
            /**
            *
            * @param iso
            * @return
            */
            public static String isoToUtf( final String iso ) {
            String utfString = iso;
            if( iso != null ) {
            try {
            utfString = new String( iso.getBytes( "ISO-8859-1" ), "UTF-8" );
            } catch ( UnsupportedEncodingException e ) {
            utfString = iso;
            }
            } else {
            utfString = "";
            }
            return utfString;
            }


            注:
            本方法應該不是最有效的,但是只要手機支持unicode的gb2312編碼,應該都可以顯示正常。
            不正之處,請各位到:http://www.ebds.com.cn/bbs/討論討論。

            posted on 2008-03-13 15:21 郭天文 閱讀(356) 評論(0)  編輯 收藏 引用 所屬分類: J2ME

            亚洲精品NV久久久久久久久久| 精品乱码久久久久久夜夜嗨| 久久久SS麻豆欧美国产日韩| 7777久久久国产精品消防器材| 精品久久久久久| 久久精品成人免费观看97| 2020国产成人久久精品| 精品国产乱码久久久久久1区2区 | 色综合久久中文字幕综合网| 亚洲国产精品无码久久SM| 日日狠狠久久偷偷色综合0 | 久久强奷乱码老熟女| 亚洲精品乱码久久久久久蜜桃不卡| 久久精品一区二区| 综合人妻久久一区二区精品| 久久er国产精品免费观看8| 久久国产精品无码HDAV| 亚洲一级Av无码毛片久久精品| 青青青青久久精品国产| 无码超乳爆乳中文字幕久久| 久久精品国产亚洲av瑜伽| 亚洲AV日韩AV天堂久久| 久久精品国产精品亚洲人人| 99久久免费国产精品热| 久久天天躁狠狠躁夜夜躁2O2O| 伊色综合久久之综合久久| 久久久国产亚洲精品| 久久精品亚洲乱码伦伦中文| 久久亚洲综合色一区二区三区| 久久精品毛片免费观看| 人妻无码αv中文字幕久久琪琪布| 久久99热这里只频精品6| 欧美日韩成人精品久久久免费看| 国产真实乱对白精彩久久| 国产精品久久精品| 久久九九全国免费| 国产真实乱对白精彩久久| 国产精品欧美亚洲韩国日本久久| 99国产精品久久久久久久成人热| 久久精品国产网红主播| 99久久精品国产高清一区二区|