C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■100319 / )  Re[12]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ WebSurfer (2537回)-(2022/07/15(Fri) 17:09:28)
No100309 (こいち さん) に返信

いろんなことを言う人がいて混乱を招きそうなのでまとめて書いておきます。

【状況】

ブラウザ(IE11 と Edge)のアドレスバーに以下のような URL + クエリ文字列を直打ちで
入力して要求をかける。

http://xxx.xxx.xxxx.xxx/xxxx.aspx?NAME=テスト

サーバー側で Request.QueryString("NAME") で受けたクエリ文字列が文字化けする。状況
No100285 によると以下の通り。

> お客様環境:
> IE:〇
> Edge:文字化け発生
>
> 社内テスト環境:
> IE:文字化け発生
> Edge:〇


【当方での検証結果】

(1) web.config で web.config で requestEncoding, responseEncoding を shift_jis に設定

Request.QueryString("NAME") の結果は IE11 は「テスト」で Edge は「繝・せ繝・」となります。

以下は Fiddler でのキャプチャ画像です。#61 が Edge、#87 が IE11 です。

http://surferonwww.info/BlogEngine/image.axd?picture=2022%2f7%2f0715Fiddler.jpg

上の画像のとおり、Edge は「テスト」を UTF-16 のパーセントエンコーディングで、IE11 は生の
Shift_JIS で送信しています。サーバー側はそれを Shift_JIS と解釈するので Edge で送信した
ものは文字化けします。

(2) web.config の設定なし(デフォルトの UTF-8)

Request.QueryString("NAME") の結果は IE11 は「�e�X�g」で Edge は「テスト」となります。

以下は Fiddler でのキャプチャ画像です。#74 が Edge、#110 が IE11 です。

http://surferonwww.info/BlogEngine/image.axd?picture=2022%2f7%2f0715Fiddler2.jpg

上の (1) と同じく、Edge は「テスト」を UTF-16 のパーセントエンコーディングで、IE11 は生の
Shift_JIS で送信しています。サーバー側はそれを UTF-8 と解釈するので IE11 で送信したものは
文字化けします。


【要確認事項】

以上の検証結果から、ブラウザの設定がデフォルトであれば、

> お客様環境:
> IE:〇
> Edge:文字化け発生

web.config で requestEncoding, responseEncoding を shift_jis に設定

> 社内テスト環境:
> IE:文字化け発生
> Edge:〇

requestEncoding, responseEncoding 設定なし(デフォルトの UTF-8)

・・・となっているのだろうと思います。確認してください。


【解決案】

(1), (2) の Fiddler の画像のとおり、web.config の設定に関わらず、サーバーに送信され
るクエリ文字列「テスト」は、Egde の場合 UTF-8 のパーセントエンコーディング、IE11 の
場合は生 Shift_JIS になるところに注意してください。

なので、IE でも Edge でも文字化けしないようにするための解決策は、requestEncoding,
responseEncoding はデフォルトの UTF-8 にして、IE11 のオプションで、

・イントラネット URL の UTF-8 クエリ文字列を送信する
・[イントラネット以外の URL の UTF-8 クエリ文字列を送信する

にチェックを入れることです。

そうすれば、サーバーに送信されるクエリ文字列「テスト」は、IE11 の場合も UTF-8 のパーセント
エンコーディングになります。(2) の Edge の場合と同様になり文字化けは起こりません。

返信 編集キー/


管理者用

- Child Tree -