サーブレット学習ノートの再温--コーディングの問題

2618 ワード

コーディングの問題を話す前に、まず一般的な文字コードについて理解します.
  • ISO-8859-1:ラテンコード、中国語
  • はサポートされていません
  • gbk,gb 2312,gb 18030:システムデフォルト符号化、中国の国標符号
  • utf-8:ほとんどの言語の符号化をサポートし、一般的にこの
  • を使用することに同意します.
    なぜ文字化けしの問題が発生したのですか?Webプログラムは通常サーバーとクライアントの間の通信であることを知っています.サーバーのデフォルトコードはISOですが、ブラウザのデフォルトコードはあまり統一されていません.一般的にブラウザはデフォルトでgbkコードです.このように、データを転送するときに文字化けの問題が発生しやすいです.
  • 応答符号化
  • サーバがクライアントデータに送信!応答はresponseオブジェクトによって行われ、応答のデータが文字データでない場合、符号化の問題を考慮する必要はありません.もちろん、応答するデータが文字データであれば、符号化の問題を考慮しなければならない.
  • responseを使用する.getWriter()がクライアントに文字データを送信する場合、以前に符号化が設定されていなかった場合、isoはデフォルトで使用されます.isoは中国語がサポートされていないため、
  • は必ず文字化されません.
  • responseを使用する.getWriter()の前にresponseを使用できます.setCharaceterEncoding()は、文字ストリームの符号化をgbkまたはutf-8に設定します.もちろん、utf-8は通常選択されます.このようにresponseを使う.getWriter()が送信する文字はutf-8で符号化されます.しかし、やはり文字化けしが発生します!ブラウザはサーバーから何がコードされたデータが送られてきたのか分からないからです!このときブラウザはgbkを使って復号するので、文字化けします!
  • はresponseを使用する.getWriter()の前にresponseを使用できます.setHeader("Content-type","text/html;charset=utf-8")は応答ヘッダを設定し、ブラウザサーバ側にutf-8符号化が使用されていることを通知し、setHeader()を呼び出すとsetCharacterEncding()メソッドも自動的に実行される.これによりブラウザはutf-8復号を使用するので、文字化けしません!
  • setHeader(「Content-Type」,「text/html;charset=utf-8」)のショートカットは、setContentType(「text/html;charset=utf-8);
    response.setContentType("text/html;charset=utf-8");
    response.setCharacterEncoding("utf-8");

    通常、私たちは最初の文だけを呼び出すことができます.彼はデフォルトで2番目の文を呼び出すことができます.

  • リクエスト符号化
  • クライアントがサーバに送信する要求パラメータは何の符号化ですか?クライアントはまずページを開き、ページにフォームを提出するか、ハイパーリンクをクリックします.このページを要求するとき、サーバ応答の符号化は何であり、クライアントが要求を送信するときの符号化は何であるか.サーバ側のデフォルトでは、パラメータを復号するためにどのような符号化が使用されますか?サーバ側はISO-8859-1をデフォルトで使用して復号します!だからこれはきっと文字化けします!isoは中国語をサポートしていないからです!要求符号化処理は、GETとPOST:GET要求パラメータが要求体にないのに対し、POST要求パラメータが要求体にあるため、処理方式が異なる.GET要求符号化処理:>String username=new String(request.getParameter(「iso-8859-1」)、「utf-8」)>server.xmlにおけるURIEncoding=utf-8 POST要求符号化処理の構成:>String username=new String(request.getParameter(「iso-8859-1」)、「utf-8」)>パラメータを取得する前にrequestを呼び出す.setCharacterEncoding("utf-8");
  • URL符号化
  • フォームのタイプ:Content-type:アプリケーション/x-www-form-urlencodedは、中国語を%に変換して2桁に従う16進法です.なぜそれを使うのか:クライアントとサーバの間で中国語を伝えるときにネットワークに適した方法に変換する必要があります.
  • 文字コードではありません!
  • クライアントとサーバの間でパラメータを渡すための方法です!
  • URL符号化は、まず文字符号化を指定し、文字列を復号してbyte[]を得、0未満のバイト+256を16進数に変換する必要がある.前に%を追加します.
  • POSTリクエストはデフォルトでURLコードを使用します!tomcatはURL復号を自動的に使用します!
  • URLコード:String username=URLEncoder.encode(username, "utf-8");
  • URL復号:String username=URLDecoder.decode(username, "utf-8");