HTTPエンコーディングの問題

https://blog.csdn.net/qq_38409944/article/details/80637980

https://blog.csdn.net/a83370892/article/details/82726700?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

ISO-8859-1はトランジットステーションとして使用できますが、gbkはhttps://blog.csdn.net/qq_38409944/article/details/80637345にはできません 

http://www.ruanyifeng.com/blog/2010/02/url_encoding.html

 

リクエスト:

結論1:URLパスのエンコーディングはUTF-8エンコーディングを使用します。

結論2:クエリ文字列のエンコーディングは、オペレーティングシステムのデフォルトのエンコーディングを使用します。

上記の2つの結論は、ブラウザにURLを直接入力することで得られます。

 

上記はURLを直接入力した場合です

(つまり、この前にサーバーは応答を返しませんでした(1、<meta http-equiv = "Content-Type" content = "text / html; charset = xxxx">

 2、response.setContent())

しかし、より一般的な状況は、開かれたWebページで(今回はサーバーが応答し、content-typeを1、htmlで設定、2をresponse.setContentで設定)、直接GetまたはPostメソッドはHTTPリクエストを作成します。

 

--------------------------------------------

開いているウェブページ

台湾 ZTE大学のLu Ruilin先生の実験によるとこのときのエンコード方式は、Webページのエンコード、つまりHTMLソースコードの文字セットによって決まります。

  <meta http-equiv = "Content-Type" content = "text / html; charset = xxxx">

上記の行の最後の文字セットがUTF-8の場合、URLはUTF-8でエンコードされ、GB2312の場合、URLはGB2312でエンコードされます。

 

結論3は、GETメソッドとPOSTメソッドのエンコーディングがWebページのエンコーディングを使用することです。

--------------------------------------------

 

Ajax呼び出しでは、IEは常にGB2312エンコーディング(オペレーティングシステムのデフォルトエンコーディング)を使用しますが、Firefoxは常にutf-8エンコーディングを使用します。これが私たちの結論です4。

 

--------------------------------------------

あなたが以前に理解したと仮定すると、あなたは現時点で頭痛を感じるはずです。わかりにくいので。オペレーティングシステム、ブラウザ、Webページの文字セットが異なると、エンコード結果もまったく異なります。プログラマがすべての結果を考慮に入れようとすると、恐ろしすぎるでしょうか。クライアントが1つのエンコード方式のみを使用してサーバーにリクエストを送信するようにする方法はありますか?

答えは「はい」です。最初にJavaScriptを使用してURLをエンコードし、次にサーバーに送信します。ブラウザーに介入する機会を与えないでください(エンコード後、URLの文字構成はルールを満たしているため、エンコードされません)。

JavaScriptの出力は常に一貫しているため、サーバーによって取得されたデータが統一された形式であることを保証します。

 

--------------------------------------------

 

encodeURI()は、JavaScriptでURLをエンコードするために使用される関数です。

これは、URL全体のエンコードに焦点を当てているため、一般的な記号に加えて、URLで特別な意味を持つ他の記号 "; / ?: @&= + $、#"はエンコードされません。

エンコード後、シンボルのUTF-8形式を出力し、各バイトの前に%を追加します。

 

 

 

==========================================

isoはトランジットを実行できるので、

String userName = new String(request.getParamter( "userName")。getBytes( "ISO8859-1")、 "utf-8")

GBKの場合は、代わりに、それはではなく、通過の数が奇数のため、輸送などの文字の偶数である  https://blog.csdn.net/qq_38409944/article/details/80637345

 

おすすめ

転載: www.cnblogs.com/sheajin/p/12690380.html