解决Delphi的Indy10组件包TIdHttpServer控件解码HTTP请求时参数乱码的问题

Delphi6下使用Indy10组件包,其中的TIdHttpServer控件在处理HTTP请求的时候

不能正确解码含有汉字的参数,如:
http://127.0.0.1/test?cmd=open&areaname=测试&areadir=D:\test
 
对于这个Url,Chrome默认按UTF-8编码发送,IE默认按GBK编码发送,而这两种情况,TIdHttpServer的CommandGet事件中TIdHTTPRequestInfo.Params.Values['areaname']返回的均为乱码。
 
用POST方式测试,也存在同样的问题。
 
经过分析Indy的源码,发现主要是由于TIdHTTPRequestInfo类,没有代码来为它设置CharSet(当返回HTML页面的时候,倒是可以通过TIdHttpResponseInfo.CharSet := 'UTF-8'; 按正确的编码返回。)
 
没有好的办法解决,最后只有手动修改Indy的代码,在TIdHTTPRequestInfo.DecodeAndSetParams()函数中增加一行:
解决Delphi的Indy10组件包TIdHttpServer控件解码HTTP请求时参数乱码的问题
 解决Delphi的Indy10组件包TIdHttpServer控件解码HTTP请求时参数乱码的问题

http://www.cnblogs.com/ddgg/archive/2013/03/10/2952859.html

上一篇:iOS中UIButton控件的用法及部分参数解释


下一篇:DataTables 控件使用和心得 (1) - 入门