亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

使用J2ME中的page進行編碼轉化

2019-11-18 12:44:04
字體:
來源:轉載
供稿:網友

一、摘要

  根據xinshouj2me在j2me版提出的“httpconnection網絡連接的問題”,本人分析了一下:由于www.163.com上的頁面編碼為gb2312,所以使用utf8讀取由于編碼方式不同會得到亂碼。于是本人根據page的編碼靈活進行編碼轉化,在此與大家共享、討論。

二、代碼分析

1.HttpConnectionHandler接口類
  最好根據page的編碼靈活進行編碼轉化,于是本人定義了一個HttpConnectionHandler接口類:

HttpConnectionHandler.java
package com.bjinfotech.PRactice.j2me.httpConnection;

import java.util.Hashtable;
import javax.microedition.io.HttpConnection;

/**
* Http連接處理器接口
* @author cleverpig
*
*/
public interface HttpConnectionHandler {
        //http請求常量
        public static final String RQH_HOST="X-Online-Host";
        public static final String RQH_ACCEPT="Accept";
        public static final String RQH_CONTENT_LANGUAGE="Content-Language";
        public static final String RQH_CONTENT_TYPE="Content-Type";
        public static final String RQH_CONNECTION_OPTION="Connection";
        //http回應常量
        public static final String RSH_DATE="Date";
        public static final String RSH_SERVER="Server";
        public static final String RSH_MODIFIEDDATE="Last-Modified";
        public static final String RSH_CONTENT_ENCODING="Content-Encoding";
        public static final String RSH_CONTENT_LENGTH="Content-Length";
        public static final String RSH_CONTENT_TYPE="Content-Type";
        
        public boolean putRequestHeaderProperty(
                        HttpConnection conn,
                        String key,
                        String keyValue);
        
        public String getResponseHeaderProperty(
                        HttpConnection conn,
                        String key);
        
        public boolean setRequestMethod(
                        HttpConnection conn,
                        String methodName);
        
        public boolean putRequestHeader(
                        HttpConnection conn,
                        Hashtable propertiesPair);
        
        public Hashtable getResponseHeader(
                        HttpConnection conn,
                        String[] propertyNames);
        
        public boolean sendRequestData(
                        HttpConnection conn,
                        Object sendData);
        
        public Object getResponseData(HttpConnection conn);
        
}

2.Html_HttpConnectionHandlerImpl類

  根據HttpConnectionHandler接口規范實現了該接口——HTML_HttpConnectionHandlerImpl類。

HTML_HttpConnectionHandlerImpl.java
package com.bjinfotech.practice.j2me.httpConnection;

import java.io.DataOutputStream;
import java.io.DataInputStream;
import java.util.Hashtable;
import java.util.Vector;
import java.util.Enumeration;
import javax.microedition.io.HttpConnection;

/**
* http連接處理器實現
* @author cleverpig
*
*/
public class HTML_HttpConnectionHandlerImpl implements HttpConnectionHandler{
        private String message="";
        
        public HTML_HttpConnectionHandlerImpl(){
        }
        
        public boolean putRequestHeaderProperty(
                        HttpConnection conn,
                        String key,
                        String keyValue){
                message="";
                try{
                        conn.setRequestProperty(key,keyValue);
                        return true;
                }
                catch(Exception ex){
                        message=ex.getMessage();
                }
                return false;
        }
        
        public String getResponseHeaderProperty(
                        HttpConnection conn,
                        String key){
                return conn.getRequestProperty(key);
        }
        
        public boolean putRequestHeader(
                        HttpConnection conn,
                        Hashtable propertiesPair){
                Enumeration keyEnumer=propertiesPair.keys();
                boolean result=true;
                while(keyEnumer.hasMoreElements()){
                        String keyName=(String)keyEnumer.nextElement();
                        String keyValue=(String)propertiesPair.get(keyName);
                        if (putRequestHeaderProperty(conn,keyName,keyValue)==false){
                                result=false;
                        }
                }
                return result;
        }
        
        public boolean setRequestMethod(
                        HttpConnection conn,
                        String methodName){
                message="";
                try{
                        conn.setRequestMethod(methodName);
                        return true;
                }
                catch(Exception ex){
                        message=ex.getMessage();
                        return false;
                }
        }
        
        public Hashtable getResponseHeader(
                        HttpConnection conn,
                        String[] propertyNames){
                Hashtable result=new Hashtable();
                for(int i=0;i<propertyNames.length;i++){
                        String keyValue=conn.getRequestProperty(propertyNames[i]);
                        result.put(propertyNames[i],keyValue);
                }
                return result;
        }
        
        public boolean sendRequestData(
                        HttpConnection conn,
                        Object sendData){
                message="";
                try{
                        DataOutputStream os=conn.openDataOutputStream();
                        os.writeUTF((String)(sendData));
                        os.flush();
                        return true;
                }
                catch(Exception ex){
                        message=ex.getMessage();
                        return false;
                }
        }
        
        public Object getResponseData(HttpConnection conn){
                DataInputStream is=null;
                message="";
                try{
                        is=conn.openDataInputStream();
                }
                catch(Exception ex){
                        message=ex.getMessage();
                        return null;
                }
                
                byte[] data=null;
                String type=getResponseHeaderProperty(conn,RSH_CONTENT_TYPE);
                int len = 0;
                try{
                        len=Integer.parseInt(getResponseHeaderProperty(conn,RSH_CONTENT_LENGTH));
                }
                catch(Exception ex){
                        len=0;
                }
                if (len > 0) {
             int actual = 0;
             int bytesread = 0 ;
             data = new byte[len];
             while ((bytesread != len) && (actual != -1)) {
                     try{
                             actual = is.read(data, bytesread, len - bytesread);
                             bytesread += actual;
                     }
                     catch(Exception ex){
                             message=ex.getMessage();
                             return null;
                     }
             }
        } else {
            int ch;
            Vector vbuffer=new Vector();
            try{
                    while ((ch = is.read()) != -1) {
                            vbuffer.addElement(new Integer(ch));
                    }
            }
                       catch(Exception ex){
                                message=ex.getMessage();
                                return null;
                       }
            len=vbuffer.size();
            data = new byte[len];
            for(int i=0;i<len;i++){
                    data[i]=((Integer)vbuffer.elementAt(i)).byteValue();
            }
        }
        
        String result=new String(data);
        int flagBeginPosition=result.indexOf("charset=");
        int flagEndPosition=result.indexOf("/">",flagBeginPosition);
        if (flagEndPosition>flagBeginPosition){
                type=result.substring(flagBeginPosition+"charset=".length(),flagEndPosition);
        }
        System.out.println("獲得html字符集:"+type);
        if (type!=null){
                
                try{
                        result=new String(data,type);
                }
                catch(Exception ex){
                        message=ex.getMessage();
                }
        }
        return result;
        }
        
        public String getMessage(){
                return message;
        }
        
        
}
上面實現類中根據page中的實際編碼類型對html字符串進行了編碼轉化,這樣就實現了page編碼的靈活轉化。
雖然靈活性加強了,但是對于內存的占用也隨之增加了一倍。

三.測試代碼

package com.bjinfotech.practice.j2me.httpConnection;

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.io.HttpConnection;
import javax.microedition.io.Connector;
import java.util.Hashtable;

public class HttpConnectionMIDlet extends MIDlet {

        public HttpConnectionMIDlet() {
                super();
        }

        
        protected void startApp() throws MIDletStateChangeException {
                HTML_HttpConnectionHandlerImpl handler=new HTML_HttpConnectionHandlerImpl();
                try{
                        String host="10.11.3.99";
                        String url="http://10.11.3.99:8080/test_gbk.html";
//                        String url="http://10.11.3.99:8080/test_gb2312.html";
//                        String url="http://10.11.3.99:8080/test_utf8.html";
                        
                        HttpConnection conn=(HttpConnection)Connector.open(url);
                        if (conn.getResponseCode()==HttpConnection.HTTP_OK){
                                System.out.println("建立連接成功");
                                
                                Hashtable requestHeaderPair=new Hashtable();
                                requestHeaderPair.put(
                                                HTML_HttpConnectionHandlerImpl.RQH_HOST,
                                                host);
                                requestHeaderPair.put(
                                                HTML_HttpConnectionHandlerImpl.RQH_CONTENT_TYPE,
                                                "application/octet-stream");
                                requestHeaderPair.put(
                                                HTML_HttpConnectionHandlerImpl.RQH_CONTENT_LANGUAGE,
                                                "en-US");
                                requestHeaderPair.put(
                                                HTML_HttpConnectionHandlerImpl.RQH_ACCEPT,
                                                "application/octet-stream");
                                requestHeaderPair.put(
                                                HTML_HttpConnectionHandlerImpl.RQH_CONNECTION_OPTION,
                                                "Keep-Alive");
                                handler.putRequestHeader(conn,requestHeaderPair);
                                handler.setRequestMethod(conn,HttpConnection.GET);
                                handler.sendRequestData(conn,"GET / HTTP/1.1");
                                if (conn.getResponseCode()==HttpConnection.HTTP_OK){
                                        System.out.println("發送請求成功");
                                        
                                        System.out.println("獲得回應數據");
                                        String reponseData=(String)handler.getResponseData(conn);
                                        System.out.println(reponseData);
                                }
                                else{
                                        System.out.println("發送請求失敗");
                                        System.out.println("錯誤信息:"+handler.getMessage());
                                }
                        }
                        else{
                                System.out.println("建立連接失敗");
                        }
                }
                catch(Exception ex){
                        System.out.println("錯誤信息:"+handler.getMessage());
                        ex.printStackTrace();
                }
                
        }       
        protected void pauseApp() {

        }
        protected void destroyApp(boolean arg0) throws MIDletStateChangeException {            
        }

}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩高清电影免费观看完整| 狠狠综合久久av一区二区小说| 欧美日韩综合视频网址| 亚洲第一偷拍网| 国产99久久精品一区二区 夜夜躁日日躁| 欧美日韩国产第一页| 91视频8mav| 91av在线视频观看| 北条麻妃久久精品| 日韩欧美一区二区在线| 丝袜一区二区三区| 深夜福利91大全| 清纯唯美亚洲综合| 久久久免费观看视频| 国产一区二区欧美日韩| 欧美午夜精品久久久久久久| 日韩亚洲一区二区| 日本亚洲欧美成人| 欧美专区在线观看| 孩xxxx性bbbb欧美| 国产精品7m视频| 日韩精品在线观看一区| 亚洲精品av在线播放| 亚洲欧美日韩在线一区| 欧美极品少妇全裸体| 久久久精品国产一区二区| 2019国产精品自在线拍国产不卡| www.国产一区| 亚洲激情电影中文字幕| 久久好看免费视频| 国产成人在线亚洲欧美| 欧美久久精品午夜青青大伊人| 国产欧美日韩免费看aⅴ视频| 成人免费看黄网站| 超薄丝袜一区二区| 亚洲精品av在线播放| 国产一区二区在线免费视频| 国产91精品久久久久| 亚洲欧洲在线观看| 成人免费在线视频网址| 国产精品成人一区| 欧美午夜精品久久久久久人妖| 亚洲成人教育av| 亚洲国产精品视频在线观看| 日韩精品视频在线免费观看| 精品欧美国产一区二区三区| 福利一区视频在线观看| 国内精品久久久久影院优| 亚洲免费精彩视频| 日韩久久精品电影| 午夜精品理论片| 亚洲春色另类小说| 91久热免费在线视频| 国产日韩精品在线观看| 成人网在线观看| 欧美日韩国产成人| 欧美一级大片在线观看| 奇米成人av国产一区二区三区| 亚洲综合在线中文字幕| 91久久久久久久一区二区| 色诱女教师一区二区三区| 日韩人体视频一二区| 欧美精品久久久久久久| 亚洲视频在线看| 亚洲国产中文字幕在线观看| 26uuu国产精品视频| 欧美日韩一二三四五区| 亚洲片国产一区一级在线观看| 成人激情黄色网| 久久视频在线观看免费| 亚洲精品成人av| 亚洲电影免费在线观看| 日韩电影中文字幕一区| 久久精品亚洲94久久精品| 国内精品国产三级国产在线专| 亚洲精品国产精品久久清纯直播| 中文字幕亚洲综合久久| 亚洲影院高清在线| 国产精品av在线播放| 日韩欧美视频一区二区三区| 亚洲成人精品久久久| 日韩成人在线网站| 亚洲国产高潮在线观看| 亚洲成色777777女色窝| 91系列在线观看| 欧美激情网友自拍| 亚洲人成网7777777国产| 久久国产精品99国产精| 尤物九九久久国产精品的分类| 日韩精品免费看| 成人午夜一级二级三级| 91久久在线播放| 亚洲国产精彩中文乱码av在线播放| 欧美另类xxx| 成人精品久久av网站| 国产精品极品美女在线观看免费| 日韩高清电影免费观看完整| 在线精品高清中文字幕| 成人a级免费视频| 成人a视频在线观看| 热久久视久久精品18亚洲精品| 精品亚洲一区二区三区| 久久国产精品视频| 久久久999精品视频| 亚洲第一国产精品| 日韩av免费看| 欧美激情国产高清| 少妇高潮久久久久久潘金莲| 国产精品成人播放| 亚洲最大福利视频| 亚洲久久久久久久久久久| 亚洲色图欧美制服丝袜另类第一页| 亚洲欧美国产一本综合首页| 亚洲人成电影网站色www| 国内精品小视频在线观看| 超碰日本道色综合久久综合| 国产精品综合网站| 欧美日韩中文在线观看| 亚洲自拍小视频免费观看| 精品丝袜一区二区三区| 国产91成人在在线播放| 热re99久久精品国产66热| 亚洲天堂成人在线| 久久伊人91精品综合网站| 欧美xxxx14xxxxx性爽| 国产91在线高潮白浆在线观看| 欧美中在线观看| 亚洲成人精品av| 久久国产精品亚洲| 亚洲第一黄色网| 在线播放日韩欧美| 国产在线不卡精品| 久久久噜久噜久久综合| 日韩精品亚洲视频| 都市激情亚洲色图| 日本欧美一级片| 一区二区三区视频在线| 热99久久精品| 欧美多人爱爱视频网站| 国产成人在线一区| 亚洲成人av资源网| 欧美亚洲一区在线| 在线视频欧美日韩| 在线观看欧美www| 福利一区视频在线观看| 久久久成人av| 欧美午夜电影在线| 国产亚洲a∨片在线观看| 亚洲美女又黄又爽在线观看| 久久久午夜视频| 日韩在线观看成人| 亚洲电影免费观看高清完整版| 国产欧美一区二区三区在线看| 亚洲人成自拍网站| 国产91精品不卡视频| 国内精品久久久久久中文字幕| 中文日韩电影网站| 夜夜嗨av一区二区三区四区| 日韩国产欧美精品在线| 久久av红桃一区二区小说| 久久久久久久久久久久av| 国产精品视频网| 日韩经典一区二区三区| 91成品人片a无限观看|