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を使用します.
QueryStringで得られたgoodstypeとnameはいずれも「孟潞研究グループ」と「孟潞」であり、時には如???などの文字化けし.urlで中国語文字を転送する際に問題があることを説明します.
このような問題は、次のいくつかの方法で解決できます.
1、方案一、webを設定する.configはaspを指定する.Netアプリケーションのデフォルトのリクエストと対応する符号化:
2、方案二:headでaspを設定する.Netページリクエストと対応する符号化
3、方案三:
中国語を伝達する前に、伝達する中国語パラメータを符号化し、受信時に復号する
送信先:
受信側:
送信先:
js符号化による伝送:
受信側:
一般的には、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
会社のバックグラウンドでは、火狐、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