1

Delphi XE2 Rest/JSON サーバーと jQTouch クライアントを使用してアプリケーションを実装しています。私はサーバー側をほぼ完成させ、現在クライアント側の開発に移っています。

jQTouch ソースをダウンロードし、PC のポート 8081 で IIS の下にセットアップしました。これはうまくいきます。

しかし、Delphi WebFileDispatcher を介して静的デモ ソースにアクセスできるようにする必要があります。これは私が問題を抱えているところです...

簡単なテスト/証明として、Web Broker / Web Server Application / Standalone VCL ウィザードを使用してこれをセットアップし、WebFileDispatcher を Web Module にドロップしました。唯一の構成は、WebFileDispatcher の「ルート」を構成してコンテンツを取得することです。


ポート 8081 の IIS 経由でコンテンツにアクセスできます
。ポート 8080 の Web Broker 経由でコンテンツにアクセスできます
。どちらもまったく同じ localhost URL を使用していますが、ポートが異なるだけです。
したがって、パスと基本構成が正しいことはわかっています。

しかし...コンテンツがWeb Brokerからサーバーアップされている場合、jQTouchメニュー項目の「より大きい」または「右矢印」は、サーカムフレックス付きの「a」として表示されます。緑の外部リンクの矢印がユーロ記号付きで表示されています。
IIS からサーバーを起動すると、コンテンツは問題なく表示されます。

問題は、IdHTTPHeaderInfo ユニットのコードによって content-type に追加されている文字セットにあるようです。このユニットは、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) または、実際のエンコーディングが応答で報告されるように、ファイルの head メタ タグをチェックする必要があります。現時点では、これらのいずれにも当てはまらないようです。

他の誰かがこれを報告が必要なバグとして分類しますか? ここまで問題を絞り込むのに 2 日かかりましたが、今後このようなことを他の人にさせたくありません。

W3.org - 文字エンコーディングの処理を参照してください

再現するには、最新の jQTouch リリースをダウンロードして、コンテンツを WebFileDispatcher にマップするだけです。

問題を示す 2 つの画像を次に示します。

![ここに画像の説明を入力][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