我用IDHTTP控件的GET事件发短信,用DELPHI2010的话,信息内容中的汉字都不正常,手机收到的汉字都变成?号了。如果用DLEPHI7就没事。源代码如下:
  sendstr:='http://125.35.1.37:20004/shttp.recmt?ua='+smsname+'&pw='+smspsw+'&mobile='+smb+'&msg='+sm;
  memo2.Lines.Add(sendstr);
  Regstr:=idhttp.Get(sendstr);同样是上面这段代码,结果就不同了,请问是什么原因啊?怎么解决?

解决方案 »

  1.   

    sendstr:='http://125.35.1.37:20004/shttp.recmt?ua='+smsname+'&pw='+smspsw+'&mobile='+smb+'&msg='+sm;
    Regstr:=idhttp.Get(sendstr);
    主要就是上面这两句,其中smsname,smspsw,smb,sm,regstr,sendstr:string;
    我试着把string改为ansistring还是不行。汉字都不能正常。在DELPHI下这样用手机就能正常收到汉字内容。
      

  2.   

    sendstr:='http://125.35.1.37:20004/shttp.recmt?ua='+smsname+'&pw='+smspsw+'&mobile='+smb+'&msg='+sm;
    Regstr:=idhttp.Get(sendstr);
    主要就是上面这两句,其中smsname,smspsw,smb,sm,regstr,sendstr:string;
    我试着把string改为ansistring还是不行。汉字都不能正常。在DELPHI7下这样用手机就能正常收到汉字内容。
      

  3.   

    接收的话将IDHTTP设置一下编码:
    IDHTTP1.Response.Charset:='GB2312';
      

  4.   

    我这是发送啊,不是接受问题,因为是给短信平台的服务器发送命令,接收的是手机。IDHTTP1.Response.Charset:='GB2312';这句我试过了,没用的,手机收到的还是都是?号。三楼说的宽字节的事那么要如何处理啊?
      

  5.   

    哪位大侠指点一下啊,为什么用D7里的IDHTTP控件GET那句,服务器端收到的内容中的汉字都正常,可是如果用D2010中的IDHTTP控件的GET上面那句代码,服务器端收到的汉字部分就成了问号了
      

  6.   

      HTTPRIO1.HTTPWebNode.UseUTF8InHeader := false;
      

  7.   

    我用的是IDHTTP控件呀,HTTPPRIO控件没使用啊?
      

  8.   

    不好意思发错了,中文路径要转换编码
    IdHTTP1.URL.URLEncode('http://www.ayandy.com/images/多云转阴.gif');
      

  9.   

    我是用的GET事件,因为需要返回值的,如果使用这个URL的话,我要怎么改啊?
    sendstr:='http://125.35.1.37:20004/shttp.recmt?ua='+smsname+'&pw='+smspsw+'&mobile='+smb+'&msg='+sm;
    Regstr:=mainform.idhttp.Get(sendstr);
      

  10.   

    sendstr:='http://125.35.1.37:20004/shttp.recmt?ua='+smsname+'&pw='+smspsw+'&mobile='+smb+'&msg='+sm;
    sendstr := IdHTTP1.URL.URLEncode(sendstr);
    Regstr:=mainform.idhttp.Get(sendstr);
      

  11.   

    我是这样改的,改完以后,收到的短信不再是问号了,而是乱码
          sendstr:=mainform.IdHTTP.URL.URLEncode(sendstr);
          Regstr:=mainform.idhttp.Get(sendstr);
      

  12.   

    在加上解析编码转换看看
    接收的话将IDHTTP设置一下编码:
    IDHTTP1.Response.Charset:='GB2312';
      

  13.   

    接收不是用电脑,所以与设置接收无关,我说的乱码是手机收到的短信,也就是说服务器收到的我发送的信息内容是乱码。你写的这句是用于GET事件返回的内容的吧。返回的只是发送是否成功的结果,都不是汉字的,所以无所谓。
      

  14.   

    我不知道你的工作原理,没有用WEBSEVCIE 服务吗,怎么用IDHTTP1?
      

  15.   

    websevice没用过,不过可能是个好主意,INDY用起来简单,所以用它了。可以试一下。我试试
      

  16.   

    HTTPRIO怎么用啊?
    Regstr:=mainform.idhttp.Get(sendstr);
    这句如果用HTTPRIO的话怎么改呀
      

  17.   

    算了还是使用我的IDHTTP吧,别的不会用,太麻烦了。
    哪位知道为什么使用IDHTTP的GET时如果URL里面有汉字,服务器收到的是乱码?在D7下就正常!
      

  18.   

    将文字的地方转换一下
    使用uses httpapp
    httpencode(需要Url编码的签字串);
    然后再把转换后的变量加入到地址里!
    比如:
    Smsname:=HttpEncode('短信名字');
    sendstr:='http://125.35.1.37:20004/shttp.recmt?ua='+Smsname+'&pw='+smspsw+'&mobile='+smb+'&msg='+sm;
      

  19.   

    不行的,可能是短信平台在后台已经做短信内容的编码处理方式给定死了,如果我用你说的广法把代码先转成了UFT8的话,接收到的短信就全是乱码了。相反在D7下直接发汉字就是正常的,在D2010下就不行,问题应该是出在版本上的不同上。我希望在D2010下直接发汉字,可以象D7一样正常。
      

  20.   

    成功了,LoveMit你的方法是对的,开始失败是因为我忘了删除原来的一行编码处理语句了,相当于给重复编码了两次。呵!很奇怪,我用转UTF8的函数试过,也是转成这种格式的代码,都不行,为什么你说的这个办法就成功了呢?不过还是感谢你的指导。多谢,马上给分。