回答編集履歴

6

訂正

2021/02/09 03:45

投稿

退会済みユーザー
test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
 
86
86
 
87
- ![イメージ説明](f3ba406e48a6c00c6a8a09312d99469e.jpeg)
87
+ ![イメージ説明](9d2d40835173e3c5d179972722cd43da.jpeg)
88
88
 
89
89
 
90
90
 

5

追記&訂正

2021/02/09 03:45

投稿

退会済みユーザー
test CHANGED
@@ -148,7 +148,7 @@
148
148
 
149
149
 
150
150
 
151
- > 回避策文字コード指定をきちんとするということになると思います。
151
+ > これやってみましたが、これはすべてファイルにやったほうがいのでしょか?
152
152
 
153
153
 
154
154
 

4

追記&訂正

2021/02/09 03:32

投稿

退会済みユーザー
test CHANGED
@@ -144,4 +144,12 @@
144
144
 
145
145
 
146
146
 
147
+ というわけで、
148
+
149
+
150
+
147
- というわけで、回避策は文字コードの指定をきちんとするということになると思います。
151
+ > 回避策は文字コードの指定をきちんとするということになると思います。
152
+
153
+
154
+
155
+ ・・・ということを回避策として取るのは間違いで、正しい回避策は応答ヘッダやメタタグで文字コードの指定をきちんとするということになると思います。

3

追記

2021/02/09 03:32

投稿

退会済みユーザー
test CHANGED
@@ -15,3 +15,133 @@
15
15
 
16
16
 
17
17
  もう少し調べて何か分かっらた追記します。
18
+
19
+
20
+
21
+ **【追記2】**
22
+
23
+
24
+
25
+ どういうことになっているか調べてみました。
26
+
27
+
28
+
29
+ 上の【追記】に書いたように Startup.cs の文字コードは Shift_JIS なのですが、html にレンダリングされるときは UTF-8 になります(そのあたりの仕様・仕組みは不明ですが、そういうことにしているのだろうと思います)。
30
+
31
+
32
+
33
+ 質問者さんのケースと同様に Startup.cs から直接日本語の文字をレンダリングするよう、以下のコードを書いて試してみました。
34
+
35
+
36
+
37
+
38
+
39
+ ```
40
+
41
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
42
+
43
+ {
44
+
45
+ // ・・・中略・・・
46
+
47
+ app.UseEndpoints(endpoints =>
48
+
49
+ {
50
+
51
+ endpoints.MapGet("/", async context =>
52
+
53
+ {
54
+
55
+ context.Response.ContentType = "text/html";
56
+
57
+ await context.Response.WriteAsync("<html><head><title>Helllo</title></head>");
58
+
59
+
60
+
61
+ await context.Response.WriteAsync("<body><h1>Hello World!</h1>");
62
+
63
+ await context.Response.WriteAsync("<p>This is a sample page.</p>");
64
+
65
+
66
+
67
+ await context.Response.WriteAsync("<h1>今日は世界!</h1>");
68
+
69
+ await context.Response.WriteAsync("<p>これはサンプルページです。</p>");
70
+
71
+
72
+
73
+ await context.Response.WriteAsync("</body></html>");
74
+
75
+ });
76
+
77
+ });
78
+
79
+ }
80
+
81
+ ```
82
+
83
+ 結果は以下のようになります。日本語は文字化けしています。
84
+
85
+
86
+
87
+ ![イメージ説明](f3ba406e48a6c00c6a8a09312d99469e.jpeg)
88
+
89
+
90
+
91
+ ただ、ASP.NET からブラウザに送信された文字コードは以下のように UTF-8 になっています。「今日は世界!」 の部分が下の画像で反転させた E4 BB 8A E6 97 A5 E3 81 AF E4 B8 96 E7 95 8C EF BC 81 で、それは UTF-8 のバイト列になっています。
92
+
93
+
94
+
95
+ ![イメージ説明](ce4692df66e7cb140d448f5c70835d28.jpeg)
96
+
97
+
98
+
99
+ なのになぜ文字化けするかというと、ブラウザが Shift_JIS と思っているからです。
100
+
101
+
102
+
103
+ _Layout.cshtml を使っていると、下の画像のように <meta charset="utf-8" /> が設定されているので文字化けの問題は起こらず、自分も今まで気が付きませんでした。
104
+
105
+
106
+
107
+ ![イメージ説明](4d37088f354000d0f0d7913c61d79be7.jpeg)
108
+
109
+
110
+
111
+ ちなみに、上のコードを <meta charset="utf-8" /> が追加されるようにすると、
112
+
113
+
114
+
115
+ ```
116
+
117
+ context.Response.ContentType = "text/html";
118
+
119
+ await context.Response.WriteAsync("<html><head>");
120
+
121
+ await context.Response.WriteAsync("<meta charset=\"utf-8\" />");
122
+
123
+ await context.Response.WriteAsync("<title>Helllo</title></head>");
124
+
125
+ await context.Response.WriteAsync("<body><h1>Hello World!</h1>");
126
+
127
+ await context.Response.WriteAsync("<p>This is a sample page.</p>");
128
+
129
+ await context.Response.WriteAsync("<h1>今日は世界!</h1>");
130
+
131
+ await context.Response.WriteAsync("<p>これはサンプルページです。</p>");
132
+
133
+ await context.Response.WriteAsync("</body></html>");
134
+
135
+ ```
136
+
137
+
138
+
139
+ 以下のように文字化けはしません。
140
+
141
+
142
+
143
+ ![イメージ説明](5a435edc450e7cc1110dc4b46309f869.jpeg)
144
+
145
+
146
+
147
+ というわけで、回避策は文字コードの指定をきちんとするということになると思います。

2

追記

2021/02/09 03:25

投稿

退会済みユーザー
test CHANGED
@@ -1 +1,17 @@
1
1
  msuguru さんの回答のコメント欄に書いたつもりが間違えてここに書いてしまいました。すみません。
2
+
3
+
4
+
5
+ **【追記】**
6
+
7
+
8
+
9
+ 間違って書いてしまったお詫びにちょっと調べて分かったことを書いておきます。
10
+
11
+
12
+
13
+ 質問のコードは VS2019 のテンプレートを使って作ったプロジェクトで自動生成されるサービスやミドルウェアを登録するためのクラス(C# でいうと Startup.cs)のようですが、自分の環境で C# で作った場合、v3.1 でも v5.0 でも Startup.cs だけ何故か文字コードが Shift_JIS になるようです。そこが問題なのかも。
14
+
15
+
16
+
17
+ もう少し調べて何か分かっらた追記します。

1

訂正

2021/02/09 01:53

投稿

退会済みユーザー
test CHANGED
@@ -1,17 +1 @@
1
- > asp.net.coreは文字化けるようです
2
-
3
-
4
-
5
- その言い方は誤解を生むかと思います。
6
-
7
-
8
-
9
- 「参考サイト」で問題があったという _LoginPartial.cshtml, _ValidationScriptsPartial.cshtml は、VS2019 のテンプレートで作成した .NET Core 3.1 および .NET 5.0 では BOM 付きの UTF-8 なっています。ちなみに VS2015 のテンプレートで作成した Core 1.0 でも BOM 付きの UTF-8 です。なので、少なくとも 1.0, 3.1, 5.0 ではその記事に書いてあったような問題は起こりません。
10
-
11
-
12
-
13
- 「参考サイト」の話は Core 2.2 のようですが・・・
14
-
15
-
16
-
17
- 「エンコーディングに UTF-8 を使うよう指定する」の話は .NET Framework の ASP.NET の話で ASP.NET Core は関係ないです。
1
+ msuguru さんの回答のコメント欄に書いたつもりが間違えてここに書いてしまいました。みません。