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()函数中增加一行: