idhttp.get中文乱码

slmax1 2011-03-11 01:11:15
UTF8Decode(IdHTTP1.Get(
'&un='
'&pwd='
'&Cnt=' //主要是这里为中文
'&Mobiles=
'&IsSign='
'&Schdate=
'&Schtime=
'&IsLong='

等等之类的参数

提交的英文参数没有问题

但提交中文字符的时候,在服务器上查看显示的是[??????]

是怎么回事,应该如何解决

...全文
757 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovewithwind 2012-05-20
  • 打赏
  • 举报
回复
我还没用成功呢
Im17benteng 2011-03-15
  • 打赏
  • 举报
回复
这个是URL参数用现成的URLEncode就行了
CaiBirdy 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 csshow 的回复:]
引用 7 楼 caibirdy 的回复:
Delphi(Pascal) code

function EnCodeUtf8URLStr(sUtf8Str:string; sSplit:string='%'):string;
var
I, iLen:Integer;
sText: PChar;
sTmp: string;
begin
Result := '';
iLen := L……
[/Quote]

好像是因为URL编码限制。。
例如在URL里传入空格是不允许的。。必须用%20代替。
一个汉字UTF8后2字节也需要用类似%11%22这样表示。。百分号是一个标识
slmax1 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 caibirdy 的回复:]
Delphi(Pascal) code

function EnCodeUtf8URLStr(sUtf8Str:string; sSplit:string='%'):string;
var
I, iLen:Integer;
sText: PChar;
sTmp: string;
begin
Result := '';
iLen := Length(s……
[/Quote]

成功了,真的就是这个问题

可以问下EnCodeUtf8URLStr这个函数的作用是什么。
chenpingqq 2011-03-11
  • 打赏
  • 举报
回复
AnsiToUtf8('中文部分') 试试

再不行就再试下下面两种方法

引用单元 HttpApp

HTTPEncode(AnsiToUtf8('中文部分'))

HTTPEncode('中文部分')

slmax1 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 caibirdy 的回复:]

Delphi(Pascal) code

function EnCodeUtf8URLStr(sUtf8Str:string; sSplit:string='%'):string;
var
I, iLen:Integer;
sText: PChar;
sTmp: string;
begin
Result := '';
iLen := Length(sUtf8Str……
[/Quote]


你这个我到单位后要好好试试,我也觉得问题可能就出在这里。
我前面没有把这方面的概念搞清楚,所以问题可能也没提得清楚。
slmax1 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sharebei 的回复:]

Delphi(Pascal) code

memo1.Text := Utf8ToAnsi( idhttp1.get('url') );
[/Quote]
你这个是返回时memo1.Text 不显示乱码

我需要的是提交到服务器的数据,在服务器上不显示乱码。

谢谢
sharebei 2011-03-11
  • 打赏
  • 举报
回复

memo1.Text := Utf8ToAnsi( idhttp1.get('url') );
CaiBirdy 2011-03-11
  • 打赏
  • 举报
回复

function EnCodeUtf8URLStr(sUtf8Str:string; sSplit:string='%'):string;
var
I, iLen:Integer;
sText: PChar;
sTmp: string;
begin
Result := '';
iLen := Length(sUtf8Str);
sText := AllocMem(iLen*2+1);
BinToHex(PChar(sUtf8Str), sText, iLen);
sTmp := string(sText);
FreeMem(sText);
if sSplit='' then
begin
Result := sTmp;
end
else
begin
iLen := Length(sTmp);
for I:=1 to iLen do
begin
if ((I-1) mod 2) = 0 then
Result := Result+sSplit;
Result := Result + sTmp[I];
end;
end;
end;


..........................
....试试吧。。这是我之前用的。。试看看。。
主要意思就是这个。。具体编码再看看要不要修改

sTmp:=EnCodeUtf8URLStr(Utf8Encode(sTmp));

UTF8Decode(IdHTTP1.Get(
'&un='
'&pwd='
'&Cnt='+sTmp+
'&Mobiles=
'&IsSign='
'&Schdate=
'&Schtime=
'&IsLong='



slmax1 2011-03-11
  • 打赏
  • 举报
回复
我看了一下,是UTF-16编码
CaiBirdy 2011-03-11
  • 打赏
  • 举报
回复
看你http服务器怎么解析。。像百度是转成编码字符串发。。就是那种一个汉字转成类似%23%43那种码。。
POST和GET都会发送。。对于你的问题要点来说并没本质区别。。。
slmax1 2011-03-11
  • 打赏
  • 举报
回复
是这样的,我看了你给的网址,人家说的是GET的返回信息是乱码

我这里说的是我提交中文字符给网址,网站上保存的是?????这样的符号
slmax1 2011-03-11
  • 打赏
  • 举报
回复
我这里是需要GET 不是POST
bdmh 2011-03-11
  • 打赏
  • 举报
回复
用wpe看看http访问时的head信息,然后根据那个新,去填写idhttp的发送信息

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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