彻底解决delphi WebBroker服务器中文乱码
彻底解决WebBroker中文显示乱码
彻底解决delphi WebBroker服务器不能显示中文网页
这个问题被折腾惨啦!
网上一大堆,就没能彻底解决掉:
经过几天的研究原生底层代码,解决如下,非常简单:
1、WebBroker的UTF-8字符集处理,是要依赖于这两个东东的:

2、你必须引用它们,才可以让后端与前端的H5代码相匹配!
uses Web.UTF8ContentParser, //:我加的
//Web.ReqMulti,
//:我加的:必须放在Web.UTF8ContentParser的后面,
//比如uploaded files,const sMultiPartFormData = 'multipart/form-data';
把它们分别:
引用到WebBroker桥接服务器所在程序单元 //LServer := TIdHTTPWebBrokerBridge.Create(nil);
引用到TWebModule所在程序单元 //TwmMain = class(TWebModule)
原文解释如下:
TUTF8ContentParser is a WebRequest content parser that parses UTF-8 requests.
TUTF8ContentParser class automatically replace the default content parser when this unit (UTF8ContentParser) is used in a web application. You should only use UTF8ContentParser in web applications that generate UTF-8 responses.To generated UTF-8 encoded responses, set Response.ContentType as follows before setting Response.Content. Response.ContentType := 'text/html; charset=UTF-8';
Note that, if your application uses the ReqMulti unit to parse multipart content, ReqMulti must appear in the application uses list after UTF8ContentParser
译为:
TUTF8ContentParser是Web UTF-8请求的内容解析器(WebRequest content parser),用于Web应用程序的TUTF8ContentParser类会自动加载替换掉默认的内容解析器单元UTF8ContentParser。你应当在Web应用程序中用它来产生UTF-8的响应信息。为了产生UTF-8编码的响应信息,应当在响应内容Response.Content返回客户端之前,设置响应的内容类型Response.ContentType,格式如下:Response.ContentType := 'text/html; charset=UTF-8';另请注意:如果你的应用使用ReqMulti来解析“多部分内容”(multipart content,比如:Response.ContentType:='text/html,multipart/form-data;charset=UTF-8';),那么ReqMulti必须uses引用在TUTF8ContentParser之后。
3、特别注意:后端Response.ContentType := 'text/html; charset=UTF-8';的格式与前端不同,前端为:<meta charset="utf-8">,有引号,后端无引号
procedure TwmMain.WebModuleAfterDispatch(
Sender: TObject;
Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
begin
Response.ContentType:='text/html; charset=UTF-8';
end;
4、搞定,效果如下:

本文提供了一种彻底解决Delphi WebBroker服务器中文乱码问题的方法,通过引入Web.UTF8ContentParser和调整Response.ContentType设置,确保前后端H5代码匹配,实现中文网页正确显示。
2876





