1

isapi(pageproducers)アプリケーションをdelphi7からdelphi2009に移植しています。ページは、UTF8のhtmlファイルに基づいています。

Onhtmltagが起動され、透明なタグをアクセント文字(áé...)などの特殊文字で任意の値に置き換える場合を除いて、すべてがうまくいきます。これらの文字は、出力で�文字に置き換えられます。

どうしたの?

4

3 に答える 3

4

デバッグ手順の一環として、ブラウザが疑問符文字に対して受け取るバイト値を正確に調べる必要があります。

ご存知のように、以前のバージョンはすべて ANSI でしたが、Delphi 2009 の文字列型は Unicode です。この型はDelphi 7 で導入されましたUtf8Stringが、Delphi 2009 ではその型が特別なものになりました。UTF-8 としてエンコードされた文字列を保持するためにその型を使用していない場合は、使用を開始する必要があります。Utf8String変数に保持されているUnicodeString値は、一方を他方に割り当てると自動的に値に変換されます。

UTF-8 でエンコードされた文字列を通常のAnsiString変数に格納している場合、UnicodeString. それはあなたが望むものではありません。

UTF-8 でエンコードされたリテラルを type の変数に割り当てている場合はstring、それをやめてください。WideStringその型は、いつものように、その値が UTF-16 としてエンコードされることを期待しています。

を使用してファイルをTStrings子孫にロードする場合はLoadFromFile、そのメソッドの 2 番目のパラメーターの使用を開始する必要があります。これは、使用するエンコーディングを指定します。UTF-8 でエンコードされたファイルは、TEncoding.UTF8. デフォルトはTEncoding.Unicodeで、リトルエンディアンの UTF-16 です。

于 2009-07-29T17:37:26.747 に答える
0

助けてくれてありがとう、いくつかのテストの後、問題は非常に単純でした(または愚かでもありました)

response.contenttype := 'text/html charset=UTF-8'

unicodestring utf8string ansistring widestring の間で手動で変換する必要はありません。Delphi 2009 の文字列の使用法はほぼ完璧です。

于 2009-07-30T12:06:21.940 に答える