JS对于位操作这些很弱的....使用ADO.Stream对象来转换,我给你找找...

解决方案 »

  1.   

    //VBScript版
    Function streamtochar(StrStream)
       set stream=CreateObject("ADODB.Stream")
           stream.type=1
           stream.Mode=3
           stream.Open 
           stream.Write Strstream
           stream.Position= 0
           stream.Type= 2
           stream.Charset="GB2312"
           streamtochar= stream.ReadText
           stream.Close
       set stream=nothing
    End Function//JScript版
    function stream2Char(stream){
    var str = "";
    var Stream = new ActiveXObject("ADODB.Stream");
    Stream.Type = 1;
    Stream.Mode = 3;
    Stream.Open();
    Stream.Write(stream);
    Stream.Position = 0;
    Stream.Type = 2;
    Stream.Charset = "gb2312";
    str = Stream.ReadText;  //这里改成ReadText()好像也不成..
    Stream.Close();
    Stream = null;
    return str;
    }我就改成这样,你自己试试吧,我这边不能创建ADODB.Stream对象.靠..
      

  2.   

    ThisCharCode=vIn.charCodeAt(i);//此处错误改为:ThisCharCode=vIn(i)Microsoft(R) JScript(R)
    charCodeAt 方法  语言参考 
    版本 3 
     请参阅                  应用于 
    --------------------------------------------------------------------------------描述
    返回指定字符的 Unicode 编码。
      

  3.   

    不行,JS里没有ASCB,MIDB对应的函数,所以只能VBS
      

  4.   

    支持调用我试过了,返回居然是空的 
    我去试matrixy的方法
      

  5.   

    不行,JS里没有ASCB,MIDB对应的函数,所以只能VBS
    --------------------------------------------------
    js是没有ascb和midb,但不代表js没有能力做这种事。绝对没有vbs能做而js不能做的事。
    我写一个midb示范一下哈<script language="JavaScript" type="text/JavaScript">
    function MidB(start,len)
    {
    var i,asc,pos=0,r_str="",end=len+start;
    for(i=0;i<this.length;i++)
    {
    asc=this.charCodeAt(i);
    if(asc<256)
    {
    pos++;
    if(pos>end) break;
    if(pos>=start) r_str+=String.fromCharCode(asc);
    }
    else
    {
    pos+=2;
    if(pos>end+1) break;
    else if(pos==end+1) 
    {
    r_str+=String.fromCharCode((asc&0xff));
    break;
    }

    if(pos>start+1) r_str+=String.fromCharCode(asc);
    else if(pos==start+1) r_str+=String.fromCharCode((asc>>8)&0xff);
    }
    }
    return r_str;
    }String.prototype.MidB=MidB;alert("中a文ae".MidB(0,4));
    </script>
      

  6.   

    靠,我上边回复怎么没人看?vbs里边midb只取一个bytejs里边的charcodeat区一个unicode,而unicode是两个byte所以取值就不对了!做出来当然乱码!vnt不是byte[]数组么?你直接vnt[i]取byte不就的了,何必如此麻烦!
      

  7.   

    楼上的别说粗口。你哪只眼睛看到楼主源码里有个叫vnt的数组了。
      

  8.   

    不是js不能写ASCB,MIDB函数
    而是js不能处理xmlHTTP.responseBody的数据(二进制)作为桌面应用可用ADODB.Stream控件,web应用就不可以了既然楼主是在做ajax应用,那就简单多了。(因为不跨域)
    你只需向ajax返回utf-8编码的内容就可以了
    如果你一定要返回非utf-8编码的内容,也只需先返回一个语言声明的头
      

  9.   

    返回的是用utf-8,用ASP输出。
    function stream2Char(stream){
    var str = "";
    var Stream = new ActiveXObject("ADODB.Stream");
    Stream.Type = 1;
    Stream.Mode = 3;
    Stream.Open();
    Stream.Write(stream);//type改成2这里用writeText倒是可以,
    Stream.Position = 0;
    Stream.Type = 2;
    Stream.Charset = "gb2312";
    str = Stream.ReadText();  //这里改成ReadText()好像也不成..
    Stream.Close();
    Stream = null;
    return str;
    }
      

  10.   

    但是type=1的时候用write怎么都不能写,说什么参数类型不正确或不在可以接受的范围内,或与其他参数冲突
      

  11.   

    ADO的设置参数问题
    好久不用这个了,我记得一个是控制只读的,一个是控制记录移动的,你找下吧
      

  12.   

    看了手册,说write()的参数是byte数组,type用1
      

  13.   

    你没有弄懂我的回复,当返回的是utf-8编码的内容或者虽不是utf-8编码但有相应的语言声明头时
    直接使用ajax.request的结果(内部应该是responseText方法)就可以了,不需要做任何转换
      

  14.   

    to xuzuning
    刚开始就是那样的,返回用的utf-8 直接使用结果就是乱码
    所以才想转换编码的嘛