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]: