私が最近作業していたシステムでは、一部のサポート システムが GB2312 エンコーディングを使用しているのに、取引システムでは UTF-8 エンコーディングが使用されているという問題が発生しました。
異なるエンコーディングのページとスクリプトが相互に参照すると文字化けが発生します。解決するには、それらを 1 つのエンコーディングに統合します。
asp.net で出力ページのエンコーディングを変更する場合は、web.config で次の構成情報を変更できます。
<グローバリゼーション requestEncoding="utf-8" responseEncoding="utf-8" />
上記は全体的なデフォルトのエンコーディングを変更するだけです。特定のページのエンコーディングのみを変更する必要がある場合は、ASP.net で次のコードを使用するだけです。
注: Page_Load() イベントの下に追加するだけです。
エンコーディング gb2312 = Encoding.GetEncoding("gb2312");
Response.ContentEncoding = gb2312;
非 ASP.net アプリケーションでは、読み取る可能性のあるデータは UTF-8 エンコードされていますが、GB2312 エンコードに変換する場合は、次のコードを参照できます。
string utfinfo = "document.write("alert('調子はどうですか??');");";
文字列gb2312info = string.Empty;
エンコーディングutf8 = エンコーディング.UTF8;
Encoding gb2312 = Encoding.GetEncoding("gb2312");
// 文字列を byte[] に変換します。
byte[] unicodeBytes = utf8.GetBytes(utfinfo);
// あるエンコーディングから別のエンコーディングへの変換を実行します。
byte[] asciiBytes = Encoding.Convert(utf8, gb2312, unicodeBytes);
// 新しい byte[] を char[] に変換してから文字列に変換します。
// これは、イラストに変換するための少し異なるアプローチです。
// GetCharCount/GetChars の使用。
char[] asciiChars = new char[gb2312.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
gb2312.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
gb2312info = new string(asciiChars);
もちろん、他のさまざまなエンコーディング間の変換は上記のコードと同様であるため、説明は省略します。