这是什么编码啊 %D6%D0%B9%FA

jozosoft 2010-09-27 05:38:12
如题,淘宝搜索商品时,在URL中显示的编码。
如,我要找“中国”,URL中显示的是“%D6%D0%B9%FA”
我想问一下这是什么编码格式?
各位能给我一段Delphi把汉字转为这种格式的编码的代码吗?

最好是D2010的。
谢谢各位了。
...全文
2077 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mit1208 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jozosoft 的回复:]
引用 12 楼 lovemit 的回复:
uses加上httpapp
然后使用的时候
用S:=HTTPEncode('中国');
S的结果就是%D6%D0%B9%FA


LoveMit
(Lovemit)

对极了!我非常钦佩地请教您,你怎么看出来是要用这个函数?我试过utf8等的转码都不对,你说的方法却完全正确。恳请指点!
[/Quote]


嘿~尝试的多了就知道了...如果是UTF8编码的话只需要S:=AnsiToUtf8(HTTPEncode('中国'));
就可以了!
dongmei757 2010-09-28
  • 打赏
  • 举报
回复
学习....
Jekhn 2010-09-28
  • 打赏
  • 举报
回复
学习!
jozosoft 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lovemit 的回复:]
uses加上httpapp
然后使用的时候
用S:=HTTPEncode('中国');
S的结果就是%D6%D0%B9%FA
[/Quote]

LoveMit
(Lovemit)

对极了!我非常钦佩地请教您,你怎么看出来是要用这个函数?我试过utf8等的转码都不对,你说的方法却完全正确。恳请指点!
jozosoft 2010-09-28
  • 打赏
  • 举报
回复
结帖!
再次谢谢各位,特别是LoveMit大虾。
Mit1208 2010-09-27
  • 打赏
  • 举报
回复
uses加上httpapp
然后使用的时候
用S:=HTTPEncode('中国');
S的结果就是%D6%D0%B9%FA
jozosoft 2010-09-27
  • 打赏
  • 举报
回复
xiedewei
(海上渔者)

我要的是淘宝的啊,不是百度的。我说了两者的编码不一样。


kye_jufei
((飛飛VS玲玲)天涯浪子居士):不行呀,不是淘宝的格式。

------------
各位大虾们,你们就直接把“中国”编码一下,如果结果是:“%D6%D0%B9%FA”
那么就OK了。其它的编码都不行,达不到要求呀。
你们可以自己打开淘宝试一下。

你们在淘宝的商品搜索栏中输入“中国”,点搜索,然后看URL地址栏,变成:
http://s.taobao.com/search?q=%D6%D0%B9%FA

“q= ”后的就是要的结果。

kye_jufei 2010-09-27
  • 打赏
  • 举报
回复
function URLDecode(const S: string): string;
var
Idx: Integer; // loops thru chars in string
Hex: string; // string of hex characters
Code: Integer; // hex character code (-1 on error)
begin
// Intialise result and string index
Result := '';
Idx := 1;
// Loop thru string decoding each character
while Idx <= Length(S) do
begin
case S[Idx] of
'%':
begin
// % should be followed by two hex digits - exception otherwise
if Idx <= Length(S) - 2 then
begin
// there are sufficient digits - try to decode hex digits
Hex := S[Idx+1] + S[Idx+2];
Code := SysUtils.StrToIntDef('$' + Hex, -1);
Inc(Idx, 2);
end
else
// insufficient digits - error
Code := -1;
// check for error and raise exception if found
if Code = -1 then
raise SysUtils.EConvertError.Create(
'Invalid hex digit in URL'
);
// decoded OK - add character to result
Result := Result + Chr(Code);
end;
'+':
// + is decoded as a space
Result := Result + ' '
else
// All other characters pass thru unchanged
Result := Result + S[Idx];
end;
Inc(Idx);
end;
end;


function URLEncode(const S: string; const InQueryString: Boolean): string;
var
Idx: Integer; // loops thru characters in string
begin
Result := '';
for Idx := 1 to Length(S) do
begin
case S[Idx] of
'A'..'Z', 'a'..'z', '0'..'9', '-', '_', '.':
Result := Result + S[Idx];
' ':
if InQueryString then
Result := Result + '+'
else
Result := Result + '%20';
else
Result := Result + '%' + SysUtils.IntToHex(Ord(S[Idx]), 2);
end;
end;
end;
xiedewei 2010-09-27
  • 打赏
  • 举报
回复
单独将参数编码一下再组合成URL就可以了
ShowMessage(Format('http://www.baidu.com/s?wd=%s', [TIdURI.ParamsEncode('中国')]));
jozosoft 2010-09-27
  • 打赏
  • 举报
回复
顺便请教一下6楼的大哥,你能用idHttp登录拍拍么?

先谢谢各位啊;/
jozosoft 2010-09-27
  • 打赏
  • 举报
回复
楼上的大哥,你试的不是淘宝,不行啊。
淘宝与baidu不是同一种编码,你用淘宝搜索一下汉字,然后观察它的地址栏就看出来了。
xiedewei 2010-09-27
  • 打赏
  • 举报
回复
IdHTTP1.URL.URLEncode('http://www.baidu.com/s?wd=中国') = 'http://www.baidu.com/s?wd=%D6%D0%B9%FA'
CaesarDM 2010-09-27
  • 打赏
  • 举报
回复
编码是
TIdURI.URLEncode
jozosoft 2010-09-27
  • 打赏
  • 举报
回复
不是的,我是要用idHttp的get方法登录淘宝,当遇到中文名字的时候,登录不了,我分析后发现,把中文的用户名进行下淘宝的那种编码后就OK。
故改一下问题请教各位大虾。
xiedewei 2010-09-27
  • 打赏
  • 举报
回复
直接用汉字也可以吧
jozosoft 2010-09-27
  • 打赏
  • 举报
回复
我不要解码,我要求把汉字转成淘宝那样完全一致的编码。
楼上的你的试过没有哟。
CaesarDM 2010-09-27
  • 打赏
  • 举报
回复
TIdURI.URLDecode

5,389

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧