質問

charsetが与えられていない場合、マルチパート/フォームデータをデコードするために使用するデフォルトのエンコードは何ですか? RFC2388の状態:

4.5フォームデータのテキストのcharset

MultiPart/Form-Dataの各部分には、コンテンツタイプがあることになっています。フィールド要素がテキストである場合、テキストのcharsetパラメーターは、使用される文字エンコードを示します。

たとえば、ユーザーが「Joeが借りている」と入力したテキストフィールドを持つフォームu003Ceu>100 'ここでu003Ceu>ユーロシンボルには、フォームデータが返されている可能性があります。

--AaB03x
content-disposition: form-data; name="field1"
content-type: text/plain;charset=windows-1250
content-transfer-encoding: quoted-printable>>

Joe owes =80100.
--AaB03x

私の場合、charsetは設定されておらず、そのテキスト/プレーンセクション内のデータをデコードする方法がわかりません。私は標準的な動作ではないものを実施したくないので、この場合、予想される動作が何であるかを尋ねています。 RFCはこれを説明していないようですので、私はちょっと迷っています。

ありがとうございました!

役に立ちましたか?

解決

のデフォルトのチャーセット HTTP 1.1 ISO-8859-1(LATIN1)、これもここにも当てはまると思います。

3.7.1標準化とテキストのデフォルト

- をちょきちょきと切る -

「charset」パラメーターは、一部のメディアタイプで使用され、データの文字セット(セクション3.4)を定義します。送信者によって明示的なcharsetパラメーターが提供されない場合、「テキスト」タイプのメディアサブタイプは、HTTPを介して受信した場合、「ISO-8859-1」のデフォルトのcharSet値を持つように定義されます。 「ISO-8859-1」以外の文字セットのデータまたはそのサブセットには、適切な憲章値をラベル付けする必要があります。互換性の問題については、セクション3.4.1を参照してください。

他のヒント

これは明らかにHTML5で変化しています(参照してください http://dev.w3.org/html5/spec-preview/constraints.html#multipart-form-data).

非ファイルフィールドに対応する生成されたマルチパート/フォームデータリソースの部分には、コンテンツタイプのヘッダーが指定されていない必要があります。

では、文字セットはどこで指定されていますか?エンコーディングアルゴリズムからわかる限り、唯一の場所はフォームデータセットエントリ内です。 _文字コード_.

フォームに名前の隠された入力がない場合 _文字コード_, 、 何が起こるのですか? Chrome 28でこれをテストし、UTF-8とISO-8859-1でエンコードされたフォームを送信し、送信されたヘッダーとペイロードを検査しましたが、Charsetはどこにも与えられていません(エンコードのテキストが間違いなく変更されていても、 )。空を含める場合 _文字コード_ フォームのフィールドでは、Chromeはそれを正しいチャーセットタイプで入力します。サーバー側のコードはそれを探す必要があると思います _文字コード_ それを理解するフィールド?

xmlhttprequest.sendを使用するChrome拡張機能を書きながら、この問題に遭遇しました formdata オブジェクト、それ ソースドキュメントエンコードが何であれ、常にUTF-8でエンコードされます.

リクエストエンティティボディを、フォームデータセットとしてデータを使用して、明示的な文字エンコードとしてUTF-8を使用して、マルチパート/フォームデータエンコードアルゴリズムを実行した結果とします。

MIMEタイプを、「MultiPart/Form-Data」、U+0020スペース文字「Boundary =」、およびMultiPart/Form-Dataエンコードアルゴリズムによって生成されたMultiPart/Form-Data境界文字列の連結とします。

前に見つけたように、charset = utf-8は、空の要求を含めない限り、POSTリクエストのどこにも指定されていません _文字コード_ この場合、「UTF-8」が自動的に入力される形式のフィールド。

これが物事の状態についての私の理解です。私の仮定の修正を歓迎します!

@owlmanの詳細な説明に感謝します。

ここにいくつかの情報があります:

リクエストペイロードフラグメントをアップロードします:

------WebKitFormBoundarydZAwJIasnBbGaUqM
Content-Disposition: form-data; name="file"; filename="xxx.txt"
Content-Type: text/plain

「xxx.txt」にUTF-8エンコードを使用してユニコードチャーがいくつかある場合、樹脂(4.0.40の時点で)は正しくデコードできませんが、jetty(9.x)はできます。

樹脂の動作の理由は、コンテンツタイプがエンコードを指定していないため、「ISO8859-1」を使用して樹脂デコードファイル名をデコードし、その結果、文字化された文字になる可能性があることだと思います。

私はいくつかのグーグルをしました:

https://mail-archives.apache.org/mod_mbox/struts-user/200310.mbox/%3c3fa0395b.1080209@kumachan.net.nz%3e

樹脂の挙動はサーブレット仕様2.3に従っているようです

から設定が見つかりません http://www.caucho.com/resin-4.0/reference.xtp樹脂のこの動作を変える可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top