使用Utf8Decode处理UTF-8字符串时,有时候正常,有时候返回空值,请问是怎么回事?
例如用Utf8Decode处理http://gz.ganji.com/zpshichangyingxiao/ 这个网页的源代码时就是返回空值。

解决方案 »

  1.   

    看源代码就知道了,delphi的Utf8Decode在解码的时候遇到它认为不正确的字符就返回空串了
    还是用winapi靠谱
      

  2.   

    是什么字符?
    如果用WINAPI,该怎么用,能否举例下,谢谢
      

  3.   

    试试
    UTF8Decode(UTF8String(str))
      

  4.   

    用UTF8Decode(UTF8String(str)) 试过了,不能解决问题。
      

  5.   

    function UTF8Decode(Data: AnsiString): WideString;
    begin
      SetLength(Result, Length(Data));
      SetLength(Data,MultiByteToWideChar(CP_UTF8,0,PAnsiChar(data),Length(Data),PWideChar(Result),Length(Data)));
    end;
    var
      str: AnsiString;
      strm: TStringStream;
    begin
      strm := TStringStream.Create('');
      try
        IdHTTP1.Get('http://gz.ganji.com/zpshichangyingxiao/', strm);
        ShowMessage(UTF8Decode( strm.DataString));  finally
        strm.Free;
      end;
    end;
      

  6.   

    这么久还没搞定?查个msdn这么费劲么……function DecodeUtf8Str(const S: UTF8String): WideString;
    var lenSrc, lenDst  : Integer;
    begin
      lenSrc  := Length(S);
      if(lenSrc=0)then Exit;
      lenDst  := MultiByteToWideChar(CP_UTF8, 0, Pointer(S), lenSrc, nil, 0);
      SetLength(Result, lenDst);
      MultiByteToWideChar(CP_UTF8, 0, Pointer(S), lenSrc, Pointer(Result), lenDst);
    end;
      

  7.   

    不知道你是不是开发解码163邮箱的程序,163邮箱用了三种编码方式,CODE64,UTF-8及BIG5。有一种解码需要解码两次,如先DECODE64,再DE UTF-8,具体顺序我不记得了,得翻翻我写的代码。
      

  8.   

    是的,delphi的Utf8Decode在解码的时候遇到它认为不正确的字符就返回空串了
      

  9.   

    var
     s:AnsiString;
     
     mmo1.Text:=UTF8Encode('中文);
     ShowMessage(UTF8Decode(s));
     ShowMessage(UTF8Decode(UTF8String(s)));
     ShowMessage(DecodeUtf8Str(s));
    //测试没发现问题
      

  10.   

    可以换种方式,把UTF8Decode 换成 Utf8Encode;
    var
      ws:string;
    begin
      ShowMessage(Utf8toAnsi(Utf8Encode(ws)));
    end;