DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: melqui
今日帖子: 21
在线用户: 13
导航: 论坛 -> 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。请教各位大大怎么处理比较好?
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
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,我找不到控制的参数
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
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
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
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去控制
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS