最近在做一个火车票余票查询的程序,主要是模拟POST取http://www.12306.cn/mormhweb/kyfw/ypcx/中的数据,通过http工具抓到了POST的数据,但里面的车站中文编码始终没搞对,请大家指教,
我抓到的数据,西安(897f5b360254943b) 但我查到实际unicode码应是:897F5B89 ,只有前面3个字节能对上,不知为什么?

解决方案 »

  1.   

    PS:只知道人人网是UTF-8的,你也可以试试。
      

  2.   

    GB2312
    UTF-8
    GBK
    都试试。
      

  3.   

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>铁路客户服务中心</title>
      

  4.   

    你取的是 form action 指向的 jsp 页面中的数据吗?iframeTrainPassStationByTrainCode.jsp
    iframeTrainInfoByStation.jsp
      

  5.   


    我取的是http://dynamic.12306.cn/TrainQuery/leftTicketByStation.jsp
    查余票的
      

  6.   

    怎么我返回的脚本文件叫做 iframeLeftTicketByStation.jsp 内容是<script>
    parent.document.getElementById("gxsj").innerHTML="余票信息每小时更新一次,本次信息更新时间为16:31。";
    parent.document.getElementById("ictN").value="84"parent.mygrid.clearAll();parent.document.getElementById("stationDIV").innerHTML="日期:<strong>20110517</strong>;<strong>南京</strong>→<strong>西安</strong>列车全部余票信息<strong>1</strong>条:";if(parent.document.getElementById("ckb1").checked &&
        !parent.document.getElementById("ckb2").checked &&
        !parent.document.getElementById("ckb3").checked &&
        !parent.document.getElementById("ckb4").checked &&
        !parent.document.getElementById("ckb5").checked &&
        !parent.document.getElementById("ckb6").checked &&
        !parent.document.getElementById("ckb7").checked &&
        parent.cc.getComboText().length == 0){parent.mygrid.setColumnHidden(7,"true");
    parent.mygrid.setColumnHidden(8,"true");
    parent.mygrid.setColumnHidden(9,"true");
    }else{
    var string = parent.cc.getComboText();
    if(string.length != 0 && (string.charAt(0) == 'C' || string.charAt(0) == 'D' || string.charAt(0) == 'G')){
    parent.mygrid.setColumnHidden(7,"true");
    parent.mygrid.setColumnHidden(8,"true");
    parent.mygrid.setColumnHidden(9,"true");
    }else{
    parent.mygrid.setColumnHidden(7,"false");
    parent.mygrid.setColumnHidden(8,"false");
    parent.mygrid.setColumnHidden(9,"false");
    }
    }parent.mygrid.addRow(0,"1,T138(上海->西安)^skbcx.jsp?cxlx=cc&date=20110517&trainCode=T138 ,南京^skbcx.jsp?cxlx=czjgcc&zm=&date=20110517&stationName_passTrain=%E5%8D%97%E4%BA%AC , 西安^skbcx.jsp?cxlx=czjgcc&zm=&date=20110517&stationName_passTrain=%E8%A5%BF%E5%AE%89, 19:07 ,08:21 ,13:14, 0 , -- ,0,0,--,--,--,--,有,特快" , 0);
    </script>
      

  7.   

    to: qqamoon
    没错,脚本是iframeLeftTicketByStation.jsp
    在post数据时有个startStation_ticketLeft表示始发站,我的问题就是这个东东,不知它是何种编码?请指教 
      

  8.   

    我抓到了所有的POST参数如下 :
    ictN 84
    fdl fdl
    lx 00
    nmonth3 05
    nmonth3_new_value true
    nday3 17
    nday3_new_value false
    startStation_ticketLeft 53174e1303c219ac
    startStation_ticketLeft_new_value true
    arriveStation_ticketLeft 897f5b36057445c9
    arriveStation_ticketLeft_new_value true
    trainCode
    trainCode_new_value true
    rFlag 1
    name_ckball value_ckball
    tFlagDC DC
    tFlagZ Z
    tFlagT T
    tFlagK K
    tFlagPK PK
    tFlagPKE PKE
    tFlagLK LK
      

  9.   


    // yp.js 中的一个方法
    // 应该是用来编码字符串的
    // 在我的页面中 pwd = "liusheng";function a1ert(str, pwd) {
        var prand = "";
        for (var i = 0; i < pwd.length; i++) {
            prand += pwd.charCodeAt(i).toString();
        }    var sPos = Math.floor(prand.length / 5);
        var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos * 2) + prand.charAt(sPos * 3) + prand.charAt(sPos * 4) + prand.charAt(sPos * 5), 10);
        var incr = Math.ceil(pwd.length / 2);
        var modu = Math.pow(2, 31) - 1;    var salt = Math.round(Math.random() * 1000000000) % 100000000;
        prand += salt;    prand = (mult * prand.length + incr) % modu;
        var enc_chr = "";
        var enc_str = "";    for (var i = 0; i < str.length; i++) {
            alert(str.charCodeAt(i));
            enc_chr = parseInt(str.charCodeAt(i) ^ Math.floor((prand / modu) * 255));        if (enc_chr < 16) {
                enc_str += "0" + enc_chr.toString(16);
            }
            else
                enc_str += enc_chr.toString(16);        prand = (mult * prand + incr) % modu;
        }    salt = salt.toString(16);    while (salt.length < 8) salt = "0" + salt;
        enc_str += salt;    return enc_str;
    }