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

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

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

IIS 10.0 URLのパラメータの日本語が文字化け

[トピック内 35 記事 (1 - 20 表示)]  << 0 | 1 >>

■100277 / inTopicNo.1)  IIS 10.0 URLのパラメータの日本語が文字化け
  
□投稿者/ こいち (2回)-(2022/07/14(Thu) 23:09:44)

分類:[ASP.NET (VB)] 

表題の通りですが、IIS 10.0 で URLに日本語パラメータを付けてサーバーのモジュールで受け取って
検索をして結果を返す処理を組んでいるのですが、ブラウザが IEの時に日本語が必ず文字化けします。
Egde や Chromeでは文字化けしません。

IEはパラメータをShift-JISでエンコードなしで送るという情報を聞いたのですが、
IISの設定で文字化けをしないようにするといったことは出来るのでしょうか。

IISの「.NET グローバリゼーション」の エンコード:ファイル、応答、応答のヘッダー、要求は 全て「shift_jis」にしています。
また、Web.config で、globalization でも同様に、shift_jis の指定を入れています。

ちなみに、IEの インターネットオプションで「URLパスをUTF-8として送信する」にチェックを付けて送ると文字化けはしません。

ということは、サーバーでは、UTF-8として受け取っていると思うのですが・・・
どこか設定をミスっておりますでしょうか?
また、見る箇所を間違えていたりしたらご指摘いただけないでしょうか。

ご存じの方がおられましたらご教授ください。
宜しくお願い致します。
引用返信 編集キー/
■100278 / inTopicNo.2)  Re[1]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ WebSurfer (2529回)-(2022/07/14(Thu) 23:26:15)
No100277 (こいち さん) に返信

↓ こういう話なのかな?

ブラウザによる URL のエンコーディング
http://surferonwww.info/BlogEngine/post/2011/11/07/Encoding-of-URL-directly-written-in-address-bar-of-browser.aspx
引用返信 編集キー/
■100279 / inTopicNo.3)  Re[2]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ こいち (3回)-(2022/07/15(Fri) 00:12:48)
No100278 (WebSurfer さん) に返信

WebSurfer さん、ありがとうございます。
昨日、このページ拝見してました!

> ↓ こういう話なのかな?
>
> ブラウザによる URL のエンコーディング
> http://surferonwww.info/BlogEngine/post/2011/11/07/Encoding-of-URL-directly-written-in-address-bar-of-browser.aspx

まさに同じ状態だと思います。
アドレスバー直打ち状態です。

やっぱり、UTF-8 として処理されるということなのでしょうか?
引用返信 編集キー/
■100280 / inTopicNo.4)  Re[3]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ WebSurfer (2530回)-(2022/07/15(Fri) 06:52:44)
No100279 (こいち さん) に返信

> 昨日、このページ拝見してました!

参考にしたネットの記事があるなら、その url を質問に書いておきましょう。

> やっぱり、UTF-8 として処理されるということなのでしょうか?

あなたの言う「処理」とはなんでしょう?
引用返信 編集キー/
■100281 / inTopicNo.5)  Re[4]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ こいち (4回)-(2022/07/15(Fri) 08:20:37)
No100280 (WebSurfer さん) に返信

> 参考にしたネットの記事があるなら、その url を質問に書いておきましょう。

申し訳ありません、昨日色々な検索結果を参照させていただいていたのですが
その中の1つに含まれていたのでそのような書き方をしました。
失礼致しました。

>>やっぱり、UTF-8 として処理されるということなのでしょうか?

サーバー側でクライアントから送信されたリクエストパラメータを受け取る処理です。

具体的にはサーバー側のモジュールで

Dim strName As String = Me.Request.QueryString("NAME")

としているのですが、IEの時に上記処理を文字化けせずに受け取るやり方はどうすれば
良いのでしょうか。

IISや、何か設定ファイルの変更が必要かと考えているのですが、その情報を探しておりました。

もちろん、その変更をしてしまえば、今度はEgde が文字化けを起こすとは思っているのですが・・・

宜しくお願い致します。
引用返信 編集キー/
■100282 / inTopicNo.6)  Re[5]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ WebSurfer (2531回)-(2022/07/15(Fri) 08:50:11)
No100281 (こいち さん) に返信

> 具体的にはサーバー側のモジュールで
>
> Dim strName As String = Me.Request.QueryString("NAME")
>
> としているのですが、IEの時に上記処理を文字化けせずに受け取るやり方はどうすれば
> 良いのでしょうか。

最初の質問に、

> IEの インターネットオプションで「URLパスをUTF-8として送信する」にチェックを付けて送ると文字化けはしません。

と書いてありますが (なぜそれが効果があるのか分かりませんが)、であれば、そのようにすれば良いのではと思いますけど? そうしない理由があるのですか?

ところで上の「サーバー側のモジュール」って何ですか?
引用返信 編集キー/
■100283 / inTopicNo.7)  Re[5]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ 魔界の仮面弁士 (3435回)-(2022/07/15(Fri) 10:15:49)
No100281 (こいち さん) に返信
> Dim strName As String = Me.Request.QueryString("NAME")

まずは、system.web/globalization/requestEncoding を確認してみてください。
既定値は "utf-8" ですが、ここを "shift_jis" にすれば
 Request.QueryString("NAME")
の振る舞いが変換します。


IE11 で、"?NAME=日本語文字列" という Query String を付与した場合、
インターネット オプションの [詳細設定] タブで、
[インターナショナル]
 - [URL パスを UTF-8 として送信する] (既定で on)
 - [イントラネット URL の UTF-8 クエリ文字列を送信する] (既定で off)
 - [イントラネット以外の URL の UTF-8 クエリ文字列を送信する] (既定で off)
によって振る舞いが異なります。これらはグループポリシーでも指定できます。
https://admx.help/?Category=Windows_10_2016&Policy=Microsoft.Policies.InternetExplorer::ControlPanel_UTF8URLQuery&Language=ja-jp

※設定変更後は、Internet Explorer を起動しなおさないと反映されないことがあります。ご注意ください。


すなわち、サーバー側の設定とクライアント側の設定の双方を合わせる必要があります。
基本的には UTF-8 に揃えた方が良いですね。
UTF-8 モードで送出しない場合、Shift_JIS に無い文字列を送出できないなどの問題が生じます。


そして UTF-8 として送信するモードの場合、
 NAME=%E6%97%A5%E6%9C%AC%E8%AA%9E%E6%96%87%E5%AD%97%E5%88%97
に変換されて送出されます。

一方、UTF-8 にしない場合は既定のコードページとなり、日本語環境では
 93,FA, 日
 96,7B, 本
 8C,EA, 語
 95,B6, 文
 8E,9A, 字
 97,F1, 列
というバイナリで送出されます。
引用返信 編集キー/
■100285 / inTopicNo.8)  Re[6]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ こいち (5回)-(2022/07/15(Fri) 10:33:09)
No100282 (WebSurfer さん) に返信

>>IEの インターネットオプションで「URLパスをUTF-8として送信する」にチェックを付けて送ると文字化けはしません。
>
> と書いてありますが (なぜそれが効果があるのか分かりませんが)、であれば、そのようにすれば良いのではと思いますけど? そうしない理由があるのですか?
>
> ところで上の「サーバー側のモジュール」って何ですか?

すみません、実はお客様から問い合わせを受けていまして、社内に同環境を作成したところ問い合わせと違う事象が確認された為
再現確認を進めている状況です。

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

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

サーバー側モジュールというのは、受け取ったパラメータを元に検索を行うモジュールです(dll)
Dim strName As String = Me.Request.QueryString("NAME")
上記のやり方で内部変数にセットしております。
引用返信 編集キー/
■100286 / inTopicNo.9)  Re[6]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ こいち (6回)-(2022/07/15(Fri) 10:53:50)
No100283 (魔界の仮面弁士 さん) に返信
ご返信ありがとうございます。

> まずは、system.web/globalization/requestEncoding を確認してみてください。
> 既定値は "utf-8" ですが、ここを "shift_jis" にすれば
>  Request.QueryString("NAME")
> の振る舞いが変換します。

web.config ですが
system.web内は以下のように指定しております。
<globalization fileEncoding="shift_jis" requestEncoding="shift_jis" responseEncoding="shift_jis" responseHeaderEncoding="shift_jis"/>

> すなわち、サーバー側の設定とクライアント側の設定の双方を合わせる必要があります。
> 基本的には UTF-8 に揃えた方が良いですね。
> UTF-8 モードで送出しない場合、Shift_JIS に無い文字列を送出できないなどの問題が生じます。

現在、処理結果から判断してモジュール内で、受け取っているのは、UTF-8 としてエンコードされている認識です。

今後はEdgeを使用することになると思うので、今の状態でも問題ないのですが、
なぜ、お客様の事象の再現が出来ないのか、というところで悩んでおります。

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

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

.NetFrameWork のバージョンによってエンコード方式が変わるといったことはございませんでしょうか?
昔は Shift-JIS だったけど、現在は UTF-8 になっているとか・・・
引用返信 編集キー/
■100287 / inTopicNo.10)  Re[7]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ 伝説のカレー (31回)-(2022/07/15(Fri) 11:13:34)
No100286 (こいち さん) に返信

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

社内テスト環境に
> <globalization fileEncoding="shift_jis" requestEncoding="shift_jis" responseEncoding="shift_jis" responseHeaderEncoding="shift_jis"/>
この設定が入ってないと仮定すると状況的には説明がつくんですけどね

> .NetFrameWork のバージョンによってエンコード方式が変わるといったことはございませんでしょうか?
> 昔は Shift-JIS だったけど、現在は UTF-8 になっているとか・・・

ないとは言い切れないですけど設定ファイルがあるんだからそれを無視されたら何のための設定ファイルなのよって思っちゃいます
お客様環境と社内テスト環境では.NETのバージョンが違うんですか?
引用返信 編集キー/
■100289 / inTopicNo.11)  Re[7]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ WebSurfer (2532回)-(2022/07/15(Fri) 11:16:04)
No100285 (こいち さん) に返信

> すみません、実はお客様から問い合わせを受けていまして、社内に同環境を作成したところ問い合わせと違う事象が確認された為
> 再現確認を進めている状況です。
>
> お客様環境:
> IE:〇
> Edge:文字化け発生
>
> 社内テスト環境:
> IE:文字化け発生
> Edge:〇

質問者さん側でも何が問題なのか把握していないようですが、それでは刑事何尾書いてあること
以外は知り得ない第三者には答えようがありません・・・なんてことは言われるまでもなく分か
っているとは思いますけど。

状況をよく整理してから、何が問題なのか、何を聞きたいのかを明確にしてから質問を書き直して
ください。
 

> サーバー側モジュールというのは、受け取ったパラメータを元に検索を行うモジュールです(dll)
> Dim strName As String = Me.Request.QueryString("NAME")
> 上記のやり方で内部変数にセットしております。

そのモジュールの中身が分からない第三者にモジュール云々と言われてもわかりません。strName
に取得できた文字列が既に文字化けしているのだろうと思いますが、であれば話がそこだけにして
ください。
引用返信 編集キー/
■100293 / inTopicNo.12)  Re[7]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ 魔界の仮面弁士 (3436回)-(2022/07/15(Fri) 11:33:11)
2022/07/15(Fri) 11:36:08 編集(投稿者)

No100286 (こいち さん) に返信
> お客様環境:
> IE:〇
> Edge:文字化け発生
>
> 社内テスト環境:
> IE:文字化け発生
> Edge:〇

"〇" は漢数字のゼロですよ? (U+3007)
https://persimummies.hatenablog.com/entry/2015/11/14/183358


> .NetFrameWork のバージョンによってエンコード方式が変わるといったことはございませんでしょうか?
「お客様環境」と「社内テスト環境」で、IE ゾーンが違っているということはありませんか?

既定の IE 設定だと、「インターネット ゾーン」と「ローカル イントラネット ゾーン」とで、
パーセントエンコーディングの有無が異なることがあります。

お客様環境がインターネットゾーンの場合は、hosts や DNS を用いて、
テスト環境のゾーンを、イントラネットからインターネットへと
変更してみてください。
https://atmarkit.itmedia.co.jp/fwin2k/win2ktips/1201iezone/iezone.html

IE の場合、今回の QueryString の件のみらず、制限付きサイト、信頼済みサイトで
アプリ動作が変わる事もあるので、検証環境と本番環境のゾーンを一致させておくことは重要です。
引用返信 編集キー/
■100294 / inTopicNo.13)  Re[8]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ こいち (7回)-(2022/07/15(Fri) 11:35:15)
No100289 (WebSurfer さん) に返信

> 質問者さん側でも何が問題なのか把握していないようですが、それでは刑事何尾書いてあること
> 以外は知り得ない第三者には答えようがありません・・・なんてことは言われるまでもなく分か
> っているとは思いますけど。
>
> 状況をよく整理してから、何が問題なのか、何を聞きたいのかを明確にしてから質問を書き直して
> ください。

重ねて申し訳ございません。

Dim strName As String = Me.Request.QueryString("NAME")
 
上記の処理で文字化けが発生していることを確認しております。

web.config、ISの「.NET グローバリゼーション」の エンコードでは、shift_jis を指定しています。
Edgeのアドレスバーに入力した日本語は正しく strName に格納されているのですが
IEの場合、文字化けしているようです。

具体的には各ブラウザで「http://xxx.xxx.xxxx.xxx/searchWeb/Login.aspx?NAME=テスト」(一部編集しております)
と送信するとstrName内には以下のように入っております。
Edge:テスト
IE:?e?X?g

エンコードの方式をshift_jisを指定しているにも関わらず、UTF-8 が使用されているようで
これの原因を知りたい状況でございます。

上手く説明出来なくて申し訳ございません。
引用返信 編集キー/
■100296 / inTopicNo.14)  Re[8]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ こいち (8回)-(2022/07/15(Fri) 11:38:37)
No100293 (魔界の仮面弁士 さん) に返信

> "〇" は漢数字のゼロですよ? (U+3007)
> https://persimummies.hatenablog.com/entry/2015/11/14/183358

申し訳ございません。文字化けしないという意味で書かせていただきました。

> 「お客様環境」と「社内テスト環境」で、IE ゾーンが違っているということはありませんか?
>
> 既定の IE 設定だと、「インターネット ゾーン」と「ローカル イントラネット ゾーン」とで、
> パーセントエンコーディングの有無が異なることがあります。
>
> お客様環境がインターネットゾーンの場合は、hosts や DNS を用いて、
> テスト環境のゾーンを、イントラネットからインターネットへと
> 変更してみてください。
> https://atmarkit.itmedia.co.jp/fwin2k/win2ktips/1201iezone/iezone.html
>
> IE の場合、今回の QueryString の件のみらず、制限付きサイト、信頼済みサイトで
> アプリ動作が変わる事もあるので、検証環境と本番環境のゾーンを一致させておくことは重要です。

ありがとうございます。
ちょっとお客様の環境状態をヒアリングさせていただごうかと思います。
引用返信 編集キー/
■100298 / inTopicNo.15)  Re[9]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ 魔界の仮面弁士 (3437回)-(2022/07/15(Fri) 11:42:52)
No100294 (こいち さん) に返信
> web.config、ISの「.NET グローバリゼーション」の エンコードでは、shift_jis を指定しています。

一般的には utf-8 のままにするものだと思いますが、そこはまぁ現場の運用方針次第ですかね。


> 具体的には各ブラウザで「http://xxx.xxx.xxxx.xxx/searchWeb/Login.aspx?NAME=テスト」(一部編集しております)
> と送信するとstrName内には以下のように入っております。
> Edge:テスト
> IE:?e?X?g

Fiddler を使うなどして、サーバーに送出される URL が
 ・生の Shift_JIS データ
 ・生の UTF-8 データ
 ・Shift_JIS でパーセントエンコーディングされたデータ
 ・UTF-8 でパーセントエンコーディングされたデータ
 ・その他
のいずれなのかを確認してみてください。
IIS や ASP.NET の設定を見直すのはその後の話。
引用返信 編集キー/
■100299 / inTopicNo.16)  Re[9]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ WebSurfer (2533回)-(2022/07/15(Fri) 11:46:16)
No100294 (こいち さん) に返信

> web.config、ISの「.NET グローバリゼーション」の エンコードでは、shift_jis を指定しています。

それは No100286 に書いてある、

> web.config ですが
> system.web内は以下のように指定しております。
> <globalization fileEncoding="shift_jis" requestEncoding="shift_jis" responseEncoding="shift_jis" responseHeaderEncoding="shift_jis"/>

のことですよね。その設定で IE11 でアドレスバーに、

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

と打ち込んで要求をかけると、

> Dim strName As String = Me.Request.QueryString("NAME")

でサーバーで strName に取得できる文字列が、

> Edge:テスト
> IE:?e?X?g

となるのが解せないという話と理解していいですか?
引用返信 編集キー/
■100301 / inTopicNo.17)  Re[10]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ WebSurfer (2534回)-(2022/07/15(Fri) 12:25:12)
No100294 (こいち さん) に返信

No100299 での確認、

>>web.config、ISの「.NET グローバリゼーション」の エンコードでは、shift_jis を指定しています。
>
> それは No100286 に書いてある、
>
>>web.config ですが
>>system.web内は以下のように指定しております。
>><globalization fileEncoding="shift_jis" requestEncoding="shift_jis" responseEncoding="shift_jis" responseHeaderEncoding="shift_jis"/>
>
> のことですよね。その設定で IE11 でアドレスバーに、
>
>>http://xxx.xxx.xxxx.xxx/searchWeb/Login.aspx?NAME=テスト
>
> と打ち込んで要求をかけると、
>
>>Dim strName As String = Me.Request.QueryString("NAME")
>
> でサーバーで strName に取得できる文字列が、
>
>>Edge:テスト
>>IE:?e?X?g
>
> となるのが解せないという話と理解していいですか?

に返事がないのですが、その設定でやってみると IE11 は「テスト」で Edge は「繝・せ繝・」で、
質問者さんの情報とは逆です。

まだ混乱してるようですね。

IE11 は生の Shift_JIS コード、Edge は UTF-8 の URL エンコーディングをクエリ文字列として
送信し、サーバー側でそれを Shift_JIS を解釈したということで当然の結果だと思います。

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

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




引用返信 編集キー/
■100308 / inTopicNo.18)  Re[10]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ こいち (9回)-(2022/07/15(Fri) 13:30:39)
No100298 (魔界の仮面弁士 さん) に返信
>>具体的には各ブラウザで「http://xxx.xxx.xxxx.xxx/searchWeb/Login.aspx?NAME=テスト」(一部編集しております)
>>と送信するとstrName内には以下のように入っております。
>>Edge:テスト
>>IE:?e?X?g
>
> Fiddler を使うなどして、サーバーに送出される URL が
>  ・生の Shift_JIS データ
>  ・生の UTF-8 データ
>  ・Shift_JIS でパーセントエンコーディングされたデータ
>  ・UTF-8 でパーセントエンコーディングされたデータ
>  ・その他
> のいずれなのかを確認してみてください。
> IIS や ASP.NET の設定を見直すのはその後の話。

すみません、実はWeb系の開発からちょっと外れておりまして、急遽お客様からの問い合わせ対応をしている状況です。
Fiddler も現在の端末に入っておらず、準備して確認してみます。
午後から別件の作業が入っているので確認や報告が遅れます。
申し訳ございません。
引用返信 編集キー/
■100309 / inTopicNo.19)  Re[11]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ こいち (10回)-(2022/07/15(Fri) 13:34:58)
2022/07/15(Fri) 13:58:59 編集(投稿者)

No100301 (WebSurfer さん) に返信
> に返事がないのですが、その設定でやってみると IE11 は「テスト」で Edge は「繝・せ繝・」で、
> 質問者さんの情報とは逆です。
>
> まだ混乱してるようですね。
>
> IE11 は生の Shift_JIS コード、Edge は UTF-8 の URL エンコーディングをクエリ文字列として
> 送信し、サーバー側でそれを Shift_JIS を解釈したということで当然の結果だと思います。
>
> 以下は Fiddler でのキャプチャ画像です。#61 が Edge、#87 が IE11 です。
>
> http://surferonwww.info/BlogEngine/image.axd?picture=2022%2f7%2f0715Fiddler.jpg

申し訳ございません。社内環境の設定が何かおかしいということですよね。。。
テストしてくださりありがとうございます。

変数:strName をログファイルに出力したら、
IE:?e?X?g
Egde:テスト
となっている状況です。
文字化けとは違うということですね。

午後から別作業をしないといけなくて確認が遅れます。
申し訳ございません。
状況確認をしてまたご報告させていただきます。
引用返信 編集キー/
■100310 / inTopicNo.20)  Re[9]: IIS 10.0 URLのパラメータの日本語が文字化け
 
□投稿者/ 大谷刑部 (206回)-(2022/07/15(Fri) 14:16:58)
No100294 (こいち さん) に返信
> ■No100289 (WebSurfer さん) に返信
>
>>質問者さん側でも何が問題なのか把握していないようですが、それでは刑事何尾書いてあること
>>以外は知り得ない第三者には答えようがありません・・・なんてことは言われるまでもなく分か
>>っているとは思いますけど。
>>
>>状況をよく整理してから、何が問題なのか、何を聞きたいのかを明確にしてから質問を書き直して
>>ください。
>
> 重ねて申し訳ございません。
>
> Dim strName As String = Me.Request.QueryString("NAME")
>  
> 上記の処理で文字化けが発生していることを確認しております。
>
> web.config、ISの「.NET グローバリゼーション」の エンコードでは、shift_jis を指定しています。
> Edgeのアドレスバーに入力した日本語は正しく strName に格納されているのですが
> IEの場合、文字化けしているようです。
>
> 具体的には各ブラウザで「http://xxx.xxx.xxxx.xxx/searchWeb/Login.aspx?NAME=テスト」(一部編集しております)
> と送信するとstrName内には以下のように入っております。
> Edge:テスト
> IE:?e?X?g
>
> エンコードの方式をshift_jisを指定しているにも関わらず、UTF-8 が使用されているようで
> これの原因を知りたい状況でございます。

エンコードがSJisでデコードがUTF-8ならおっしゃるような結果になりますね。

No100283の指摘通りクライアント(ブラウザー)とサーバーの設定があってないことが原因なんじゃないでしょうか?

まずは、現状の設定の確認からだと思います。
引用返信 編集キー/

このトピックをツリーで一括表示

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -