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

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

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

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

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

■100311 / inTopicNo.21)  Re[12]: IIS 10.0 URLのパラメータの日本語が文字化け
  
□投稿者/ WebSurfer (2535回)-(2022/07/15(Fri) 14:24:24)
No100309 (こいち さん) に返信

> 社内環境の設定が何かおかしいということですよね。。。

ブラウザの設定がデフォルトであれば、

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

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

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

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

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

解決策は、web.config の requestEncoding, responseEncoding 設定はなし(デフォルト
の UTF-8)にして、IE11 のオプションで、

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

にチェックを入れることだと思います。

引用返信 編集キー/
■100312 / inTopicNo.22)  Re[9]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ 魔界の仮面弁士 (3438回)-(2022/07/15(Fri) 14:27:35)
No100294 (こいち さん) に返信
> Edge:テスト
> IE:?e?X?g
> エンコードの方式をshift_jisを指定しているにも関わらず、UTF-8 が使用されているようで

NAME=テスト
NAME=%E3%83%86%E3%82%B9%E3%83%88
NAME=%83e%83X%83g

の結果を、「お客様環境」「社内テスト環境」とで、Edge / IE それぞれ比較できますか?
Fiddler の導入が難しい場合は、上記だけでも状況をソコソコ絞り込めるかと思います。

Shift_JIS でエンコードされた "テスト" を UTF-8 でデコードすると "繝・せ繝・" に化けます。
UTF-8 でエンコードされた "テスト" を Shift_JIS でデコードすると "?e?X?g" に化けます。
引用返信 編集キー/
■100313 / inTopicNo.23)  Re[10]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ 大谷刑部 (207回)-(2022/07/15(Fri) 14:37:55)
No100312 (魔界の仮面弁士 さん) に返信
> ■No100294 (こいち さん) に返信
>>Edge:テスト
>>IE:?e?X?g
>>エンコードの方式をshift_jisを指定しているにも関わらず、UTF-8 が使用されているようで
>
> NAME=テスト
> NAME=%E3%83%86%E3%82%B9%E3%83%88
> NAME=%83e%83X%83g
>
> の結果を、「お客様環境」「社内テスト環境」とで、Edge / IE それぞれ比較できますか?
> Fiddler の導入が難しい場合は、上記だけでも状況をソコソコ絞り込めるかと思います。
>
> Shift_JIS でエンコードされた "テスト" を UTF-8 でデコードすると "繝・せ繝・" に化けます。
> UTF-8 でエンコードされた "テスト" を Shift_JIS でデコードすると "?e?X?g" に化けます。

逆じゃありません?
質問者さんが嘘を言ってない限り、

>><globalization fileEncoding="shift_jis" requestEncoding="shift_jis" responseEncoding="shift_jis" responseHeaderEncoding="shift_jis"/>

なのでS-JISでエンコードはされてる気がしますし。

引用返信 編集キー/
■100314 / inTopicNo.24)  Re[12]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ WebSurfer (2536回)-(2022/07/15(Fri) 14:42:11)
No100309 (こいち さん) に返信

追伸です。

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

それは「社内テスト環境」で requestEncoding, responseEncoding 設定なし(デフォルト
の UTF-8)の結果ですよね?

IE はデフォルトで「テスト」というクエリ文字列を生 Shift_JIS で送信しますが、その
コードは「83 65 83 58 83 67」(16 進) となります。「?e?X?g」は「83 65 83 58 83 67」
をサーバー側で UTF-8 だと思って解釈した結果です。

65, 58, 67 は UTF-8 ではぞれぞれ e, X, g となります。83 は UTF-8 として解釈できな
いので ? に置き換わった結果です。

要するに、?e?X?g は文字化けです。


引用返信 編集キー/
■100315 / inTopicNo.25)  Re[9]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ 大谷刑部 (208回)-(2022/07/15(Fri) 14:52:58)
No100294 (こいち さん) に返信
> Dim strName As String = Me.Request.QueryString("NAME")
>  
> 上記の処理で文字化けが発生していることを確認しております。

文字コードをS-JISで指定してデコードしたらどうなりますか?

https://hensa40.cutegirl.jp/archives/2186
引用返信 編集キー/
■100316 / inTopicNo.26)  Re[11]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ 魔界の仮面弁士 (3439回)-(2022/07/15(Fri) 14:59:58)
2022/07/15(Fri) 15:05:00 編集(投稿者)

No100313 (大谷刑部 さん) に返信
>>Shift_JIS でエンコードされた "テスト" を UTF-8 でデコードすると "繝・せ繝・" に化けます。
>>UTF-8 でエンコードされた "テスト" を Shift_JIS でデコードすると "?e?X?g" に化けます。
> 逆じゃありません?

Oops...逆になってますね。(汗
大変申し訳ない。


Shift_JIS "テスト"は「83 65 83 58 83 67」
(パーセントエンコードした場合は "%83e%83X%83g")
これを UTF-8 で復元すると
 83 → (不正データ)
 65 → "e"
 83 → (不正データ)
 58 → "X"
 83 → (不正データ)
 67 → "g"
という化け方。


UTF-8 "テスト" は「E3 83 86 E3 82 B9 E3 83 88」
(パーセントエンコードした場合は "%E3%83%86%E3%82%B9%E3%83%88")
これを Shift_JIS として復元すると
 E383 → "繝"
 86E3 → "・" …Shift_JIS では未定義、Shift_JIS-2004 ではU+32DA (丸サ)
 82B9 → "せ"
 E383 → "繝"
 88 → (不正データ)
という化け方。
引用返信 編集キー/
■100317 / inTopicNo.27)  Re[10]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ 大谷刑部 (209回)-(2022/07/15(Fri) 15:04:25)
No100315 (大谷刑部 さん) に返信
> ■No100294 (こいち さん) に返信
>>Dim strName As String = Me.Request.QueryString("NAME")
>>  
>>上記の処理で文字化けが発生していることを確認しております。
>
> 文字コードをS-JISで指定してデコードしたらどうなりますか?
> ↓
> https://hensa40.cutegirl.jp/archives/2186

上記のサイトだと文字コード指定しないサンプルになってたので

https://www.ipentec.com/document/csharp-decode-url

を参考にしてもらった方がいいかも。
C#をVBの構文に置き換えれば、S-JISでデコードできるはずです。

引用返信 編集キー/
■100318 / inTopicNo.28)  Re[12]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ 大谷刑部 (210回)-(2022/07/15(Fri) 15:08:43)
No100316 (魔界の仮面弁士 さん) に返信
> 2022/07/15(Fri) 15:05:00 編集(投稿者)
>
> ■No100313 (大谷刑部 さん) に返信
> >>Shift_JIS でエンコードされた "テスト" を UTF-8 でデコードすると "繝・せ繝・" に化けます。
> >>UTF-8 でエンコードされた "テスト" を Shift_JIS でデコードすると "?e?X?g" に化けます。
>>逆じゃありません?
>
> Oops...逆になってますね。(汗
> 大変申し訳ない。
>
>
> Shift_JIS "テスト"は「83 65 83 58 83 67」
> (パーセントエンコードした場合は "%83e%83X%83g")
> これを UTF-8 で復元すると
>  83 → (不正データ)
>  65 → "e"
>  83 → (不正データ)
>  58 → "X"
>  83 → (不正データ)
>  67 → "g"
> という化け方。
>
>
> UTF-8 "テスト" は「E3 83 86 E3 82 B9 E3 83 88」
> (パーセントエンコードした場合は "%E3%83%86%E3%82%B9%E3%83%88")
> これを Shift_JIS として復元すると
>  E383 → "繝"
>  86E3 → "・" …Shift_JIS では未定義、Shift_JIS-2004 ではU+32DA (丸サ)
>  82B9 → "せ"
>  E383 → "繝"
>  88 → (不正データ)
> という化け方。

ですね。ということで質問者さん。

上記のケースに該当すると思うので、エンコード自体は設定どおりS-JISでできてると思います。
デコードがUTF-8でされているための化けと思うのでデコードもS-JISでできれば無事元の文字に戻ると思います。

引用返信 編集キー/
■100319 / inTopicNo.29)  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 は「&#65533;e&#65533;X&#65533;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 の場合と同様になり文字化けは起こりません。

引用返信 編集キー/
■100323 / inTopicNo.30)  Re[13]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ こいち (11回)-(2022/07/15(Fri) 19:21:42)
No100319 (WebSurfer さん) に返信

すみません、遅くなりました。
色々ありがとうございます。

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

こちらですが、web.config では requestEncoding, responseEncoding を shift_jis に設定しています。
(ここは変更せずテストしておりました)

で、大谷刑部 さんが書かれていることが気になって、
-------------------------------------------------------------
Dim strName As String = Me.Request.QueryString("NAME")
-------------------------------------------------------------
ここの処理を下記のように修正してみました。
-----------------------------------------------------------------------------------------------------------------------
Dim queryDictionary As NameValueCollection = HttpUtility.ParseQueryString(Context.Request.Url.Query, Encoding.UTF8)
Dim strName As String = queryDictionary.Get("NAME")
-----------------------------------------------------------------------------------------------------------------------

パラメータの取得時にどの文字コードを指定しているのかよく分からなかったので明示的に指定してみました。
Encoding.Defalt は「繝・せ繝・」となったため、Encoding.UTF8 を試したら
結果、IE も Edge もパラメータで指定した文字を取得することが出来ました。
IEはの以下のオプションはチェックは付けていない状態でした。(PC再起動済み)
・イントラネット URL の UTF-8 クエリ文字列を送信する
・イントラネット以外の URL の UTF-8 クエリ文字列を送信する

正直、よく理解出来ていないのですが、一旦、上司に相談してこちらで検証を進める話になりました。 

web.config の globalization が効いていないのでしょうか・・・

WebSurfer様、魔界の仮面弁士様、大谷刑部様、ありがとうございました。
まだ理解出来ていないところがありますが、解決とさせていただきます。

引き続き、勉強は継続してみます。
解決済み
引用返信 編集キー/
■100339 / inTopicNo.31)  Re[14]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ 大谷刑部 (212回)-(2022/07/16(Sat) 09:45:30)
No100323 (こいち さん) に返信
> ■No100319 (WebSurfer さん) に返信
>
> すみません、遅くなりました。
> 色々ありがとうございます。
>
>>(1) web.config で web.config で requestEncoding, responseEncoding を shift_jis に設定
>
> こちらですが、web.config では requestEncoding, responseEncoding を shift_jis に設定しています。
> (ここは変更せずテストしておりました)
>
> で、大谷刑部 さんが書かれていることが気になって、
> -------------------------------------------------------------
> Dim strName As String = Me.Request.QueryString("NAME")
> -------------------------------------------------------------
> ここの処理を下記のように修正してみました。
> -----------------------------------------------------------------------------------------------------------------------
> Dim queryDictionary As NameValueCollection = HttpUtility.ParseQueryString(Context.Request.Url.Query, Encoding.UTF8)
> Dim strName As String = queryDictionary.Get("NAME")
> -----------------------------------------------------------------------------------------------------------------------
>
> パラメータの取得時にどの文字コードを指定しているのかよく分からなかったので明示的に指定してみました。
> Encoding.Defalt は「繝・せ繝・」となったため、Encoding.UTF8 を試したら
> 結果、IE も Edge もパラメータで指定した文字を取得することが出来ました。

それはエンコードの方をUTF-8に変えて解決したということになるのですが、それで構わないんですね?
設定ファイルで、エンコードをs-jisにするのが要件的に必須なのかと思ってました。

前にも書きましたが、弁さんのエンコードとデコードの文字コードが一致してなかったとの指摘が全てかと。

上司に相談して最終決定するにしても、原因の根本を理解してから話した方がよろしいかと

弁さんがエンコードデコードの不一致の例まで書いてくれてるのですから、それを元に説明するのが一番わかりやすいでしょう。
解決済み
引用返信 編集キー/
■100340 / inTopicNo.32)  Re[14]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ WebSurfer (2538回)-(2022/07/16(Sat) 09:51:28)
No100323 (こいち さん) に返信

> こちらですが、web.config では requestEncoding, responseEncoding を shift_jis に設定しています。

ということは、結局以下のようになった理由は分からないということですね。

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

質問者さん・お客の固有の環境の問題とかとかがあるとすと、第三者には分からない話な
のかも。


> Dim queryDictionary As NameValueCollection = HttpUtility.ParseQueryString(Context.Request.Url.Query, Encoding.UTF8)
> Dim strName As String = queryDictionary.Get("NAME")
> パラメータの取得時にどの文字コードを指定しているのかよく分からなかったので明示的に指定してみました。
> Encoding.Defalt は「繝・せ繝・」となったため、Encoding.UTF8 を試したら
> 結果、IE も Edge もパラメータで指定した文字を取得することが出来ました。

そこは興味を引いたのでこちらの環境でも試してみました。

「テスト」の生 Shift_JIS のバイト列が送信されてきているのに、UTF-8 でデコードして
もとの「テスト」になるなんてあり得ないと思っていたのですが、実際に試してみたら結果
は以下の通りとなりました。(1) の IE11 が不可解ですが・・・

(1) の IE11 で Request.Url.Query が ?NAME=%E3%83%86%E3%82%B9%E3%83%88

(1) requestEncoding="shift_jis" responseEncoding="shift_jis"

Edge 103.0.1264.49
Request.QueryString["NAME"]: 繝・せ繝・
Request.Url.Query: ?NAME=%E3%83%86%E3%82%B9%E3%83%88

IE11
Request.QueryString["NAME"]: テスト
Request.Url.Query: ?NAME=%E3%83%86%E3%82%B9%E3%83%88 ←これが不可解


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

Edge 103.0.1264.49
Request.QueryString["NAME"]: テスト
Request.Url.Query: ?NAME=%E3%83%86%E3%82%B9%E3%83%88

IE11
Request.QueryString["NAME"]: ?e?X?g
Request.Url.Query: ?NAME=%EF%BF%BDe%EF%BF%BDX%EF%BF%BDg

注: 上の ? は REPLACEMENT_CHARACTER (U+FFFD) で、U+FFFD は UTF-8 のバイト列で
  は EF BF BD となります。Unicode デコーダーではデコードできず置き換えられ
  た結果です。

引用返信 編集キー/
■100341 / inTopicNo.33)  Re[15]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ WebSurfer (2539回)-(2022/07/16(Sat) 09:52:25)
解決済みマーク
解決済み
引用返信 編集キー/
■100352 / inTopicNo.34)  Re[15]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ こいち (12回)-(2022/07/17(Sun) 23:13:24)
No100340 (WebSurfer さん) に返信
すみません、遅くなりました。

> ということは、結局以下のようになった理由は分からないということですね。

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

はい、これも解決していないのですが、環境に依存している問題の可能性はあるかと
思っています。IISか、VisualStudioの設定か、分からないのですが・・・

> そこは興味を引いたのでこちらの環境でも試してみました。
>
> 「テスト」の生 Shift_JIS のバイト列が送信されてきているのに、UTF-8 でデコードして
> もとの「テスト」になるなんてあり得ないと思っていたのですが、実際に試してみたら結果
> は以下の通りとなりました。(1) の IE11 が不可解ですが・・・

ご確認いただきありがとうございます。
自分もなぜこれでうまくいったのか未だに分かっておりません。
お客様と打ち合わせを設けるのは大分先になるので検証がNGになった場合、
また見直すことになるかもしれません。
その時はお客様環境を十分確認した上で再度検証を進めようと思います。
引用返信 編集キー/
■100353 / inTopicNo.35)  Re[15]: IIS 10.0 URLのパラメータの日本語が文字化け
□投稿者/ こいち (13回)-(2022/07/17(Sun) 23:18:50)
No100339 (大谷刑部 さん) に返信

> それはエンコードの方をUTF-8に変えて解決したということになるのですが、それで構わないんですね?
> 設定ファイルで、エンコードをs-jisにするのが要件的に必須なのかと思ってました。
>
> 前にも書きましたが、弁さんのエンコードとデコードの文字コードが一致してなかったとの指摘が全てかと。
>
> 上司に相談して最終決定するにしても、原因の根本を理解してから話した方がよろしいかと
>
> 弁さんがエンコードデコードの不一致の例まで書いてくれてるのですから、それを元に説明するのが一番わかりやすいでしょう。

すみません、遅くなりました。
上司にも相談したんですが、簡単にお客様の環境を調査することは出来ないとのことで
一旦、調査は凍結することになりました。

お客様環境を確認出来ていないので不安要素はあるのですが・・・
解決済み
引用返信 編集キー/

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

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

このトピックに書きこむ