|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
ngdik (ngdik) |
▲▲▲▲△ |
-
|
普通会员 |
|
2017/10/22 13:05:26 |
标题: |
请问TNetHttpClient如何Post GBK编码的中文参数 |
浏览:1586 |
|
加入我的收藏 |
楼主: |
RT。 小弟现在在做一个对接,服务端是很老旧的系统,要求post中文参数使用GBK编码。但是我试过即使在post函数加上TEncoding参数,Post出去的中文依然是urlencoded的UTF-8编码,无法改为urlencoded后的GBK。请教各位大大怎么处理比较好?
----------------------------------------------
- |
作者: |
|
2017/10/22 13:14:56 |
1楼: |
urlencoded 什么时候会处理非 URL 了? 是不是 这个 处理 有参数可以控制?
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
ngdik (ngdik) |
▲▲▲▲△ |
-
|
普通会员 |
|
2017/10/22 13:26:02 |
2楼: |
form中param会被urlencoded,我找不到控制的参数
----------------------------------------------
-
|
作者: |
|
2017/10/22 16:40:24 |
3楼: |
如果你自己抢先 UrlEncode 之后,它还会再做一遍吗?
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
star5 (星五) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2017/10/22 17:42:38 |
4楼: |
function UrlEncode(const AStr: AnsiString): AnsiString; const NoConversion = ['A' .. 'Z', 'a' .. 'z', '*', '@', '.', '_', '-', '0' .. '9', '$', '!', '''', '(', ')']; var Sp, Rp: PAnsiChar; begin SetLength(Result, Length(AStr) * 3); Sp := PAnsiChar(AStr); Rp := PAnsiChar(Result); while Sp^ <> #0 do begin if Sp^ in NoConversion then Rp^ := Sp^ else if Sp^ = ' ' then Rp^ := '+' else begin {$WARNINGS OFF} FormatBuf(Rp^, 3, AnsiString('%%%.2x'), 6, [Ord(Sp^)]); {$WARNINGS ON} inc(Rp, 2); end; inc(Rp); inc(Sp); end; SetLength(Result, Rp - PAnsiChar(Result)); Result := AnsiString(string(Result)); end;
用这个函数,来自于xe2,支持gbk,另外,建议用Tstringstream创建936编码写入,如s:=tstringstream.create('',TEncoding.GetEncoding(936)),大致上这样写,然后post(url,流,返回流);
----------------------------------------------
博客 - http://offeu.com 脚本模型 - http://webpascal.com 需要短信接口的请联系我,可发行业与营销内容。
|
作者: |
star5 (星五) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2017/10/22 17:49:09 |
5楼: |
post的内容一般是不需要编码的,只要传入相应字符集的内容就可以。 对于一些接口有要求的,才需要用urlencode对每个参数进行编码一下,这也是比较常见的。
----------------------------------------------
博客 - http://offeu.com 脚本模型 - http://webpascal.com 需要短信接口的请联系我,可发行业与营销内容。
|
作者: |
|
2017/10/23 8:49:06 |
6楼: |
windows平台就直接用wininet不就可以了么。 编码什么的全部自由控制。
----------------------------------------------
--
|
作者: |
ngdik (ngdik) |
▲▲▲▲△ |
-
|
普通会员 |
|
2017/10/24 1:07:04 |
7楼: |
感谢楼上三位大哥的回复
to wang_80919: 会的,因为%号本身就会被urlencoded
to star5: 谢谢大哥这个函数,是可以工作的。 另外,非英文及常见标点符号的所有字符都会以浏览器的格式进行编码,无论utf-8或者别的。
to bahamut8348: 因为有更好用的控件在,所以不打算用原始的api去控制
----------------------------------------------
-
|
|