解決方法がわからない問題があります。
Indy10HTTPサーバーがあります。私は多くのアプリケーションでIndy9とIndy10の両方のHTTPサーバーを使用してきましたが、問題はありませんでした。しかし今、私はExtJSjavascriptRAIフレームワークでIndy10HTTPサーバーを使用しています。
問題は、ansi以外の文字を含むデータを送信する場合です。たとえば、1250コードページ(スロベニア語、クロアチア語...)の文字である文字「č」を送信すると、Indyの「unparsedparams」->「%C4%8D」で次のようになります。これは、utf-8エンコーディングでの「č」文字の正しい16進表現です。私のページはすべてutf-8であり、フォームデータをIndyに送信するのに問題はありませんでした。コードをデバッグしたところ、[37、67、52、37、56、68]のようなバイトシーケンスが実際に取得されていることがわかりました。これは、文字列 "%C4%8D"のバイト表現です。しかしもちろん、IndyはこれをUTF-16に正しくエンコードすることはできません。例として。実際のフォームフィールド:
FirstName=črt
送信すると次のようになります。
FirstName=%C4%8Drt
これを解決する方法がわかりません。ExtJSフォーラムを見ましたが、このトピックについては何もありません。誰かがこの種の問題について何か知っていますか?
編集:
paramsとJSONをエンコードすると、正しく到着します。また、パラメータをURLデコードしようとしましたが、結果が正しくありません。多分私は何かを逃した。これをもう一度見ていきます。そして、はい、ExtJSURLはパラメータをエンコードしているようです
EDIT2:
わかりました、私はもっと発見しました。投稿データの実際の内容を比較しました。これは次のようなものです。
Delphi 2006 (Indy10): FirstName=%C4%8D
Delphi 2010 (Indy10): FirstName=%C4%8D
どちらの場合も、解析されていないパラメータは同じです。ParseParamsをオンにしていて、BDS2006では正しく解析されていますが、2010では正しく解析されていません。これは、デルファイでバルクされたIndy10です。このバージョンにバグがありますか、それとも何か間違ったことをしていますか?
EDIT3:
最新のナイトリービルドodIndy10をダウンロードしました。それでも同じ問題。
EDIT4:
私は自分の答えを受け入れることを余儀なくされています。