Utf8Decode不能正确解码UTF8字符串的问题 使用Utf8Decode处理UTF-8字符串时,有时候正常,有时候返回空值,请问是怎么回事?例如用Utf8Decode处理http://gz.ganji.com/zpshichangyingxiao/ 这个网页的源代码时就是返回空值。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看源代码就知道了,delphi的Utf8Decode在解码的时候遇到它认为不正确的字符就返回空串了还是用winapi靠谱 是什么字符?如果用WINAPI,该怎么用,能否举例下,谢谢 试试UTF8Decode(UTF8String(str)) 用UTF8Decode(UTF8String(str)) 试过了,不能解决问题。 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; 这么久还没搞定?查个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; 不知道你是不是开发解码163邮箱的程序,163邮箱用了三种编码方式,CODE64,UTF-8及BIG5。有一种解码需要解码两次,如先DECODE64,再DE UTF-8,具体顺序我不记得了,得翻翻我写的代码。 是的,delphi的Utf8Decode在解码的时候遇到它认为不正确的字符就返回空串了 var s:AnsiString; mmo1.Text:=UTF8Encode('中文); ShowMessage(UTF8Decode(s)); ShowMessage(UTF8Decode(UTF8String(s))); ShowMessage(DecodeUtf8Str(s));//测试没发现问题 可以换种方式,把UTF8Decode 换成 Utf8Encode;var ws:string;begin ShowMessage(Utf8toAnsi(Utf8Encode(ws)));end; 谁能帮帮我呀~~~~~~~~~~~~~~~ 小女子谢谢各位了 代码已经贴出来了 这个获取两个表相同记录的实现思路该怎样? 求教Edit事件问题.. 又一个插入数据判断重复的问题,该如何做?头都大了! 输入一些名称,项目等,直接打到证书上,怎么办?? 1当在DBGRID按光标键,如何触发 有对条码枪编程经验的请进,紧急求助 我要离开这里--WGYKING散分贴(二) 请问我用adoconnection和adoadodataset打开数据库,如何得到count,即共有多少条, 关于delphi的模糊查询! :) 大家帮忙看看这个查询语句哪里不对? 1个程序被打开然后另一个程序自动运行
还是用winapi靠谱
如果用WINAPI,该怎么用,能否举例下,谢谢
UTF8Decode(UTF8String(str))
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;
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;
s:AnsiString;
mmo1.Text:=UTF8Encode('中文);
ShowMessage(UTF8Decode(s));
ShowMessage(UTF8Decode(UTF8String(s)));
ShowMessage(DecodeUtf8Str(s));
//测试没发现问题
var
ws:string;
begin
ShowMessage(Utf8toAnsi(Utf8Encode(ws)));
end;