我只想做一个很单纯的把"红茶"的UTF8字串解码放到memo里怎么做都失败?memo1.lines.add(UTF8Decode('%e7%ba%a2%e8%8c%b6'));memo1会出现%e7%ba%a2%e8%8c%b6,也就是说没有decode,是我观念错还是哪边的问题?btw, 我用memo1.lines.add(UTF8Encode('红茶'));他也只会出现红茶不会出现%e7%ba%a2%e8%8c%b6

解决方案 »

  1.   

    你的那个串可能不是UTF8字符串,我下面的代码可以看到UTF8的字符串。
    procedure TForm1.Button1Click(Sender: TObject);
    var
      UTF8 :String;
    begin
      UTF8 := UTF8Encode('红茶');
      showmessage(UTF8);
      Label1.Caption := UTF8Decode(UTF8);
    end;
      

  2.   

    是utf8的,但不能象你那样用procedure TForm1.Button4Click(Sender: TObject);
    var
            UTF8 :String;
    begin
            SetLength(UTF8,7);
            UTF8[1]:=#$e7;
            UTF8[2]:=#$ba;
            UTF8[3]:=#$a2;
            UTF8[4]:=#$e8;
            UTF8[5]:=#$8c;
            UTF8[6]:=#$b6;
            UTF8[7]:=#0;
            Form1.Caption := UTF8Decode(UTF8);
    end;
      

  3.   

    您的写法跳出来的会是红茶,不会是encode后的那堆%xxx字串
      

  4.   

    您的写法跳出来的是一堆问号其实我的整个流程是想处理编码过的url,并把参数解出来后放到memo上,已经查出来传送的编码是utf8,目前是用TStringList去接来以过滤分隔字元,可是在把utf8字串转码放到memo上的时候怎么转都不会有变化,伤脑筋阿!
      

  5.   


    你搞错了?我的代码没跳东西,改了form的标题,我用的是D7
      

  6.   

    我改写用showmessage去跳跟原来的改form标题都是一样的,一堆问号
      

  7.   

    不懂了,我用delphi7,可以解出来的貌似,你那个平台的UTF8Decode什么事情都没做。
      

  8.   


    procedure TForm1.Button4Click(Sender: TObject);
    var
            UTF8 :String;
            ss: WideString;
            mLen: integer;
    begin
            SetLength(UTF8,7);
            UTF8[1]:=#$e7;
            UTF8[2]:=#$ba;
            UTF8[3]:=#$a2;
            UTF8[4]:=#$e8;
            UTF8[5]:=#$8c;
            UTF8[6]:=#$b6;
            UTF8[7]:=#0;
            SetLength(ss,7);
            mLen := Utf8ToUnicode(PWideChar(ss),PAnsiChar(UTF8),7);
            SetLength(ss,mLen-1);
            Form1.Caption := ss;
    end;
    换个函数试下,D7也可以的
      

  9.   

    D7下是这样用的procedure TForm1.Button5Click(Sender: TObject);
    begin
            //uses HTTPApp
            showmessage(HTTPEncode(UTF8Encode('红茶')));
            showmessage(UTF8Decode(HTTPDecode('%e7%ba%a2%e8%8c%b6')));
    end;
    2010我这没有,没法帮你试了,网上查查吧
      

  10.   


    uses
      IdURI;var
      s: string;
    begin
      s := '%e7%ba%a2%e8%8c%b6';
      ShowMessage(TIdURI.URLDecode(s));   // 红茶
    end;
      

  11.   

    感谢前辈~其实我昨天爬了一整天的文就是找不到解法!最后只好自暴自弃的上来求助!
    使用httpdecode就可以了!但是indy的urldecode也不行!
    前辈可以分析一下问题的环节出在哪边吗?感恩~
      

  12.   

    没有D2010不过,从我了解的情况,你可以试下
    var 
      s1: AnsiString;
      s2: string;
    begin
      s1 := '红茶';
      showmessage(UTF8Encode(s1));  s2 := '红茶';
      showmessage(UTF8Encode(s2));
    end;如果结果不一样,问题就在这了。
      

  13.   

    結果確實會不一樣沒錯,不過其實我不懂的是編碼的作法,因為我也有去測試用HTTPDecode印出來的也是個看不懂的字,再經過UTF8Decode之後就會正常顯示出來,那%xx%xx到底是哪種編碼?
      

  14.   

    那%xx%xx到底是哪種編碼?里面的xx是utf-8编码的一个字节,16进制为了http传输的需要,把数字的xx转换成字符串。var i: byte;i:=$ab;
    showmessage(inttohex(i,2));//显示字符串AB