汉字url编码, 有哪位可以告诉我?怎样把url里的汉字转成这样(100分)

  • 主题发起人 主题发起人 fiorear
  • 开始时间 开始时间
F

fiorear

Unregistered / Unconfirmed
GUEST, unregistred user!
url: http://mysever/auction.aspx?region=3&realm=71&faction=1&search=%E7%89%B9%E6%95%88%E6%B3%95%E5%8A%9B%E8%8D%AF%E6%B0%B4&quality=-1&InvenType=-1
mystr:=%E7%89%B9%E6%95%88%E6%B3%95%E5%8A%9B%E8%8D%AF%E6%B0%B4
我试过:1)HTTPDecode(url); url(now)=http://mysever/auction.aspx?region=3&realm=71&faction=1&search=鐗规晥娉曞姏鑽?按&quality=-1&InvenType=-1
2) mystr(now)=鐗规晥娉曞姏鑽?按; utf8toAnsi(mystr)="特效法力药水"
我想问的是:特效法力药水 怎样才能转成 %E7%89%B9%E6%95%88%E6%B3%95%E5%8A%9B%E8%8D%AF%E6%B0%B4 这个不行:HttpEncode(http://mysever/auction.aspx?region=3&realm=71&faction=1&search=特效法力药水&quality=-1&InvenType=-1)
 
是否先转换到宽字符串,再
 
AnsiToUtf8('特效法力药水') 得到的串依次用16进制显示出来就是你要的结果.
 
URLEncode('特效法力药水')

别忘了uses IdGlobal
 
我的 AnsiToUtf8 函数是 这样:
function AnsiToUTF8(Ansi: string): string;
var
s: string;
i: integer;
j, k: string[2];
a: array[1..1000] of char;
begin
s := '';
StringToWideChar(Ansi, @(a[1]), 500);
i := 1;
while ((a <> #0) or (a[i + 1] <> #0)) do begin
j := IntToHex(Integer(a), 2);
k := IntToHex(Integer(a[i + 1]), 2);
s := s + '/u' + k + j;
i := i + 2;
end;
Result := s;
end;
AnsiToUtf8(&quot;特效法力药水&quot;);
结果:/u7279/u6548/u6CD5/u529B/u836F/u6C34 但是不等于 %E7%89%B9%E6%95%88%E6%B3%95%E5%8A%9B%E8%8D%AF%E6%B0%B4
能给出详细的做法吗,各位
 
Uses
IdGlobal;

UrlEncode(&quot;特效法力药水&quot;);//刚试过, 好象不行, 没有这个函数
UrlEncode 是否 和 HttpEncode 一样
 
用code decode
 
特效法力药水?你们想干嘛子啊,不要做坏事啊,[:D][:D]
 
Function ToUrlString(const Value:String):String;
var
Utf8:String;
I:Integer;
B:Byte;
begin
Result := '';
{AnsiToUtf8是现成的Delphi支持的RTL函数}
Utf8:= AnsiToUtf8(Value);
for I := 1 to Length(Utf8) do
begin
B := Ord(Utf8);
Result := Result + Format('%%%X',);
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(ToUrlString('特效法力药水'));
end;
 
function HzToUrl(s: string):string;
var
i:integer;
s1: string;
begin
s1:= AnsiToUtf8(s);
Result:='';
for i:= 1 to Length(s1) do
Result:= Result+ '%'+inttoHEx(Byte(s1),2);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin

memo1.lines.add(HzToUrl('特效法力药水'));
end;
 
google 搜索了一下,IdGlobal好像是Indy组件里的,你的delphi没装Indy么?
 
非常感谢各位的详细解说, 我试了, (wr960204, 飘雪):thanks
ToUrlString() 1楼
HzToUrl() 2楼
结果:%5C%75%37%32%37%39%5C%75%36%35%34%38%5C%75%36%43%44%35%5C%75%35%32%39%42%5C%75%38%33%36%46%5C%75%36%43%33%34
HttpCode('特效法力药水')
结果: %CC%D8%D0%A7%B7%A8%C1%A6%D2%A9%CB%AE

All different from:%E7%89%B9%E6%95%88%E6%B3%95%E5%8A%9B%E8%8D%AF%E6%B0%B4(我需要的)

强调的是:我以前的思路是 str:=HttpDecode(%E7%89%B9%E6%95%88%E6%B3%95%E5%8A%9B%E8%8D%AF%E6%B0%B4) Utf8toAnsi(str)='特效法力药水' 得出准确的答案 于是我反过来
str:=AnsitoUtf8('特效法力药水') HttpEncode(str) 开始错了, 刚再试了, 发现原来自己写的 AnsitoUtf8搞乱了, 使用Delphi自带的AnsitoUtf8 成功了;
 
回kkyy, 呵呵, 我不会那样做
 
多人接受答案了。
 
找了半天. 找到这个帖子. 很有用.收藏先
 
后退
顶部