HTTP リクエストで実際の文字エンコーディングを取得する必要があります。
を使用できますが、リクエストでエンコーディングが指定されていない場合、HttpServletRequest.getCharacterEncoding()
これが返されます。FAQと HTTP 仕様によると、そのnull
時であると推測できます。ISO-8859-1
それでも、仕様に基づいて物事を想定するよりも、単にそれが何であるかを教えてくれるメソッドを呼び出したいと思います。そのような方法はありますか?
誰かがリクエストを送信しているときは、そのリクエストに適切なエンコーディングを設定するのは彼/彼女の責任であり、そうでない場合は、それをゴミとして安全に扱う必要があります。サーバー側での要求のエンコードについて推測することは、後で意図しない問題が発生する可能性があるため、賢明なことではありません。自分で物事を想定するよりも、リクエストを失敗させる方が良いです。また、不要な処理はリソースを消費し、適切に保護されていない場合、潜在的な悪用を証明する可能性があるため、できるだけ早くリクエストを失敗させます。
http パケットでエンコーディングが指定されていない場合、この関数は問題を抱え、しばらくの間多くの批判を浴びました。
どうやら doPost メソッドの早い段階で呼び出す方が便利ですが、私は気にしません。Spring の CharacterEncodingFilter に直行します。
もう少し手間がかかりますが、長期的には生活が楽になります。
これを確認する簡単な方法はありません。ただし、リクエストの本文を取得したら、そこから文字列を作成し、エンコーディング例外をキャッチしてエンコーディングを決定できます。しかし、これはエレガントではないと思います。
処理前にリクエストの有効性を確認するための別の良い記事を次に示します。
https://www.owasp.org/index.php/How_to_add_validation_logic_to_HttpServletRequest
リクエストヘッダーに存在しない場合、取得する方法はありません。
ただし、POST フォームを表示する HTML ページの応答で使用したものと同じエンコーディングです。通常、このような HTML ページは、デフォルトの応答エンコーディングが実際には ISO-8859-1 である JSP によって提供されますが、
<%@page pageEncoding="UTF-8"%>
これにより、Content-Type: text/html;charset=UTF-8
応答ヘッダーが設定され、Web ブラウザーは送信されたフォーム データをまったく同じ文字セットを使用してエンコードするように指示されます。このエンコーディングを使用して POST リクエスト本文を適切に処理するには、明示的に呼び出す必要があります
request.setCharacterEncoding("UTF-8");
事前にgetCharacterEncoding()
返品の場合null
。