1

我正在使用 Delphi XE2 Rest/JSON Server 和 jQTouch 客户端实现一个应用程序。我已经基本完成了服务器端,现在正在转向客户端开发。

我已经下载了 jQTouch 源代码,并在我的 PC 的 8081 端口上的 IIS 下设置了它。这工作正常。

但我需要通过 Delphi WebFileDispatcher 访问静态演示源。这就是我有问题的地方......

作为一个精简的测试/证明,我使用 Web Broker / Web Server Application / Standalone VCL 向导进行了设置,并将 WebFileDispatcher 拖放到 Web 模块上。唯一的配置是配置 WebFileDispatcher 的“根”以获取内容。

这是以最简单的形式重现的问题:
我可以通过端口 8081 上的 IIS 访问内容。
我可以通过端口 8080 上的 Web Broker 访问内容。
两者都使用完全相同的 localhost URL,只是端口不同。
所以我知道我的路径和基本配置是正确的。

但是......当内容从 Web Broker 上服务器时,jQTouch 菜单项上的“大于”或“右箭头”显示为带有抑扬符的“a”。绿色的外部链接箭头出现,上面带有欧元符号。
当服务器从 IIS 启动时,内容显示没有任何问题。

问题似乎是 IdHTTPHeaderInfo 单元中的代码附加到内容类型的字符集。当 html 和 css 文件为 UTF-8 时,本单元添加 'charset=8859-1'。

我可以通过将 WebFileDispatcher 的 WebFileExtensions 属性中定义的 MimeTypes 更改为包含 charset=UTF-8 来解决此问题。即将“text/html”的条目更改为“text/html”;字符集=UTF-8'。

但这应该是必需的吗?我不这么认为。我认为:A)如果 Delphi 包含一个为这些文件提供服务的 Web 服务器,并且它的默认设置是假设所有文本文件都是 8859-1,那么应该设置 Web 调度程序的 mime 类型以将其覆盖为正确的值UTF-8 的。B)或者应该检查文件的头部元标记,以便在响应中报告实际编码。目前,这两种情况似乎都不是。

其他人会将此归类为需要报告的错误吗?花了两天时间才把问题缩小到这一步,而且我不希望其他人将来不得不这样做。

请参阅W3.org - 处理字符编码

要重现,只需下载最新的 jQTouch 版本并将内容映射到 WebFileDispatcher。

这是显示问题的两张图片:

![在此处输入图像描述][2]

在此处输入图像描述

此外,以下是与 Web 模块配置相关的 Delphi 文件。

这是PAS文件...

unit WebModuleUnit1;

interface

uses System.SysUtils, System.Classes, Web.HTTPApp;

type
  TWebModule1 = class(TWebModule)
    WebFileDispatcher1: TWebFileDispatcher;
    procedure WebModule1DefaultHandlerAction(Sender: TObject;
      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  WebModuleClass: TComponentClass = TWebModule1;

implementation

{$R *.dfm}

procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  Response.Content := '<html><heading/><body>Web Server Application</body></html>';
end;

end.

这是dfm...

object WebModule1: TWebModule1
  OldCreateOrder = False
  Actions = <
    item
      Default = True
      Name = 'DefaultHandler'
      PathInfo = '/'
      OnAction = WebModule1DefaultHandlerAction
    end>
  Height = 230
  Width = 415
  object WebFileDispatcher1: TWebFileDispatcher
    WebFileExtensions = <
      item
        MimeType = 'text/css'
        Extensions = 'css'
      end
      item
        MimeType = 'text/html'
        Extensions = 'html;htm'
      end
      item
        MimeType = 'text/javascript'
        Extensions = 'js'
      end
      item
        MimeType = 'image/jpeg'
        Extensions = 'jpeg;jpg'
      end
      item
        MimeType = 'image/x-png'
        Extensions = 'png'
      end>
    WebDirectories = <
      item
        DirectoryAction = dirInclude
        DirectoryMask = '*'
      end
      item
        DirectoryAction = dirExclude
        DirectoryMask = '\templates\*'
      end>
    RootDirectory = 'C:\WebRoot'
    Left = 80
    Top = 64
  end
end

[2]:

4

0 回答 0