Url文字列による文字化けし問題の解決

4960 ワード

文字化けし、文字化けし、
会社のバックグラウンドでは、火狐、IE 9、ie 8、urlを通じて文字列を渡し、正常に表示されますが、ie 6、7を使うと、文字化けして表示されます.
urlのget方式で伝達する文字列の中に中国語の文字があることを発見して、思い出します.NETのクラスライブラリにはurlの符号化が可能なURLEncodeというクラスがありますが、私はページの先端で、jsがurlを符号化する方法を提供するか、jqueryがurlを符号化する方法を提供します.提示するしかなく、urlを符号化する方法は3つあることが分かった.
この3つの方法はそれぞれ次のとおりです.
encodeURI(),encodeURIComponent(),escape.
EncodeURIComponent()メソッド:URI文字列をUTF-8符号化フォーマットでescapeフォーマットの文字列に変換します.この方法は、encodeURI()に比べて、/などの文字など、より多くの文字を符号化する.したがって文字列にURIのいくつかの部分が含まれている場合、この方法で符号化することはできません.そうしないと、/文字が符号化された後にURLにエラーが表示されます.このメソッドではエンコードされない文字:
encodeURIComponent(「test.aspx?id=aadfasf」)を使用するとエラーが発生します.
EncodeURI()メソッド:URI文字列をUTF-8符号化フォーマットでescapeフォーマットの文字列に変換します.このメソッドで符号化されない文字:!@#$&*( ) = :/; ? + '
Escape()メソッド:指定した文字列をセットで符号化します.すべてのスペース記号、句読点、特殊文字、およびその他の非ASCII文字は、%xx形式の文字符号化に変換されます(xxは、文字セットテーブル内の文字の符号化の16進数に等しい).たとえば、スペース記号に対応する符号化は%20です.unescapeメソッドはこれとは逆です.このメソッドで符号化されない文字:@*/+
 
asp.Net開発では、URLに中国語文字をパラメータとして渡すと、QueryStringで取得した値でエラーが発生する可能性があります.たとえば、次のurlを使用します.
1 string url = "decode.aspx?goodstype=     &name=  ";
2 Response.Redirect(url);

QueryStringで得られたgoodstypeとnameはいずれも「孟潞研究グループ」と「孟潞」であり、時には如???などの文字化けし.urlで中国語文字を転送する際に問題があることを説明します.
このような問題は、次のいくつかの方法で解決できます.
1、方案一、webを設定する.configはaspを指定する.Netアプリケーションのデフォルトのリクエストと対応する符号化:
<configuration>
    <system.web>
        <globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312"/>
        <compilation debug="false" targetFramework="4.0" />
    </system.web>
</configuration>

2、方案二:headでaspを設定する.Netページリクエストと対応する符号化
1 <meta http-equiv="Content-type" content="text/html; charset=gb2312" />

3、方案三:
中国語を伝達する前に、伝達する中国語パラメータを符号化し、受信時に復号する
送信先:
1  string url = "decode.aspx?goodstype="+Server.UrlEncode("     ")+"&name="+Server.UrlEncode("  ");
2  Response.Redirect(url);

受信側:
 string id =Server.UrlDecode(Request.QueryString["goodstype"]);
            string name =Server.UrlDecode(Request.QueryString["name"]);
            Response.Write(id + "<br/>" + name);

送信先:
js符号化による伝送:
1   <script language="javascript" type="text/javascript">
2         function urltest() {
3             window.location.href = 'decode.aspx?goodsType=' + escape("     ") + "&name=" + escape("  ");
4         }
5     </script>

受信側:
      if (!IsPostBack)
        {
            string id =Server.UrlDecode(Request.QueryString["goodstype"]);
            string name =Server.UrlDecode(Request.QueryString["name"]);
            Response.Write(id + "<br/>" + name);
        }

 
一般的には、webを設定する.configファイルで良いのですが、jsでwebserivceメソッドを呼び出すとwebを設定します.configは無効です!
4、機械環境に中国語をサポートさせる
以上の方法がまだだめで、中国語の伝達に問題がある場合は、以下の方法を試してみてください.
(1)ページをメモ帳で開き、「名前を付けて保存」を選択し、デフォルトasciiではなく「UTF-8」を符号化方法として選択する.
(2)レジストリを開く:HKEY_LOCAL_MACHINESYSTEMCurrentControl SetServicesInetInfoParametersFavorDBCS値0
(3)修正後、IISを再起動する必要があり、
付録:
文字コードの種類:
http://blog.sina.com.cn/s/blog_69c189bf0100mt8v.html
国際化cultureテーブル
http://hi.baidu.com/clayedu/item/51b2e353ddae55908c12edc6