var
  r: string;
begin
  r := idhttp.post('www.***.com/123.php', data);
  memo1.text := utf8toansi(r);
end;在d7中是正确的,但是在d2009中,最后r中的中文字全是问号,页面是utf-8怎么办

解决方案 »

  1.   

    不转呢?不是说 2009 支持unicode吗.可能不需要转了吧
      

  2.   

    不需要转,D2009的string缺省就是UicodeString
      

  3.   

    不转的话就是不是问号了,而是乱码
    <title>登录失败</title>
      

  4.   

    既然D2009的string是unicode编码,那就这样.
    memo1.text := unicodetoutf8(utf8toansi(r));
      

  5.   

    抱歉,上面写错了.
    memo1.text := utf8toansi(unicodetoutf8(r));
      

  6.   

    刚才写的匆忙,下面是UnicodeToUtf8的原型,照着用吧.
    function UnicodeToUtf8(Dest: PChar; MaxDestBytes: Cardinal; Source: PWideChar; SourceChars: Cardinal): Cardinal;
      

  7.   

    String 内部映射到的是UnicodeString 保存的是UTF-16字符UnicodeString 向下转型到 AnsiString 可能会丢失数据
      

  8.   

    对,建议在网页的编码上处理
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

    <meta http-equiv="Content-Type" content="text/html; charset=utf-16" />
    你就直接用UnicodeString,不需要转了.
      

  9.   

    D2009的Indy支持TIdEncoding的~自己注意看的
    有en8bit,en7Bit,enUTF8的
    如果想用ANSI,那你需要自己重写IOHandler的处理,代码不过百来行
      

  10.   

    应该使用UTF8Decode
    一个是字符集编码,一个是字符存储编码,要搞清楚了