解决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()函数中增加一行:
 
posted @ 2013-03-10 17:20  叮叮当当  阅读(2914)  评论(0编辑  收藏  举报