質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

F#

F#は、MicroSoftが開発した.NET Framework 向けのマルチパラダイムプログラミング言語です。 Visual Studio 2010 より標準搭載されました。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ASP.NET Web API

ASP.NET Web APIはブラウザやモバイル機器のようなクライアント向けのHTTPサービスを構築するフレームワークです。Microsoft .NET Frameworkがベースになっており、RESTfulサービスを構築するには理想的です。

Q&A

解決済

2回答

5157閲覧

asp.net.coreでの文字化けを解決したい。

Bolshikh_i_mal

総合スコア32

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

F#

F#は、MicroSoftが開発した.NET Framework 向けのマルチパラダイムプログラミング言語です。 Visual Studio 2010 より標準搭載されました。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ASP.NET Web API

ASP.NET Web APIはブラウザやモバイル機器のようなクライアント向けのHTTPサービスを構築するフレームワークです。Microsoft .NET Frameworkがベースになっており、RESTfulサービスを構築するには理想的です。

0グッド

0クリップ

投稿2021/02/07 20:52

編集2021/02/08 07:33

visual studio2019 にて 新しいプロジェクトをF#のasp.net coreに設定して
startup.fs にこのようなコードを試しながら書いてみたのですが
どうしても日本語が日本語になりません

namespace

1 2open System 3open System.Text 4open Microsoft.AspNetCore.Builder 5open Microsoft.AspNetCore.Hosting 6open Microsoft.AspNetCore.Http 7open Microsoft.Extensions.DependencyInjection 8open Microsoft.Extensions.Hosting 9 10type Startup() = 11 let jumon = Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) 12 let nihongo agrs = System.Text.Encoding.UTF8 13 let (br,sengen,toji) = ("<br />","<html hreflang=\"ja\">","</html>") 14 let kotoba= 15 [| 16 "Hello World!" 17 "日本語" 18 |] 19 // This method gets called by the runtime. Use this method to add services to the container. 20 // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 21 member _.ConfigureServices(services: IServiceCollection) = 22 () 23 24 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 25 member _.Configure(app: IApplicationBuilder, env: IWebHostEnvironment) = 26 if env.IsDevelopment() then 27 app.UseDeveloperExceptionPage() |> ignore 28 29 app.UseRouting() 30 .UseEndpoints(fun endpoints -> 31 endpoints.MapGet("/", fun context -> 32 context.Response.WriteAsync(sengen) |> ignore 33 context.Response.WriteAsync("<body>") |> ignore 34 context.Response.WriteAsync(kotoba.[0] + br) |> ignore 35 context.Response.WriteAsync(kotoba.[1]) |> ignore 36 context.Response.WriteAsync("</body>") |> ignore 37 nihongo |> ignore 38 context.Response.WriteAsync(toji)) |> ignore 39 ) |> ignore 40

これを実行すると、
実行した画面

このような文字が表示されてしまいます。
これを 日本語 と表示したいと考えています。

はい。
ご指摘の通り
イメージ説明
これはやってみましたが、これはすべてのファイルにやったほうがいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/08 08:24

>これはやってみましたが、これはすべてのファイルにやったほうがいいのでしょうか? 表示は正常に行われましたか? 文字コード問題は数年以上から言及されているにも関わらず未だに治していないので適時行ってください。 どうやらウィザード経由で生成したファイルは全て文字化けするようです。 ウィザードを経由しなければUTF-8になるので文字化けしないそうです。 参考 https://teratail.com/questions/79935
Bolshikh_i_mal

2021/02/08 11:16

.fsファイルに対してこの設定をしてみてダメだったので ご指摘の通り .json ファイルもこの設定で上書きしてみたら System.FormatException: 'Could not parse the JSON file.' JsonReaderException: '0xE2' is an invalid start of a property name. Expected a '"'. LineNumber: 0 | BytePositionInLine: 1. こういうエラーが出てしまいました。
Bolshikh_i_mal

2021/02/08 11:33

System.FormatException: 'Could not parse the JSON file.' というエラーは 行の終わりをWindowsに統一して保存したら解決しましたが 文字化けは解決しませんでした。
guest

回答2

0

ベストアンサー

msuguru さんの回答のコメント欄に書いたつもりが間違えてここに書いてしまいました。すみません。

【追記】

間違って書いてしまったお詫びにちょっと調べて分かったことを書いておきます。

質問のコードは VS2019 のテンプレートを使って作ったプロジェクトで自動生成されるサービスやミドルウェアを登録するためのクラス(C# でいうと Startup.cs)のようですが、自分の環境で C# で作った場合、v3.1 でも v5.0 でも Startup.cs だけ何故か文字コードが Shift_JIS になるようです。そこが問題なのかも。

もう少し調べて何か分かっらた追記します。

【追記2】

どういうことになっているか調べてみました。

上の【追記】に書いたように Startup.cs の文字コードは Shift_JIS なのですが、html にレンダリングされるときは UTF-8 になります(そのあたりの仕様・仕組みは不明ですが、そういうことにしているのだろうと思います)。

質問者さんのケースと同様に Startup.cs から直接日本語の文字をレンダリングするよう、以下のコードを書いて試してみました。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // ・・・中略・・・ app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { context.Response.ContentType = "text/html"; await context.Response.WriteAsync("<html><head><title>Helllo</title></head>"); await context.Response.WriteAsync("<body><h1>Hello World!</h1>"); await context.Response.WriteAsync("<p>This is a sample page.</p>"); await context.Response.WriteAsync("<h1>今日は世界!</h1>"); await context.Response.WriteAsync("<p>これはサンプルページです。</p>"); await context.Response.WriteAsync("</body></html>"); }); }); }

結果は以下のようになります。日本語は文字化けしています。

イメージ説明

ただ、ASP.NET からブラウザに送信された文字コードは以下のように UTF-8 になっています。「今日は世界!」 の部分が下の画像で反転させた E4 BB 8A E6 97 A5 E3 81 AF E4 B8 96 E7 95 8C EF BC 81 で、それは UTF-8 のバイト列になっています。

イメージ説明

なのになぜ文字化けするかというと、ブラウザが Shift_JIS と思っているからです。

_Layout.cshtml を使っていると、下の画像のように <meta charset="utf-8" /> が設定されているので文字化けの問題は起こらず、自分も今まで気が付きませんでした。

イメージ説明

ちなみに、上のコードを <meta charset="utf-8" /> が追加されるようにすると、

context.Response.ContentType = "text/html"; await context.Response.WriteAsync("<html><head>"); await context.Response.WriteAsync("<meta charset=\"utf-8\" />"); await context.Response.WriteAsync("<title>Helllo</title></head>"); await context.Response.WriteAsync("<body><h1>Hello World!</h1>"); await context.Response.WriteAsync("<p>This is a sample page.</p>"); await context.Response.WriteAsync("<h1>今日は世界!</h1>"); await context.Response.WriteAsync("<p>これはサンプルページです。</p>"); await context.Response.WriteAsync("</body></html>");

以下のように文字化けはしません。

イメージ説明

というわけで、

これはやってみましたが、これはすべてのファイルにやったほうがいいのでしょうか?

・・・ということを回避策として取るのは間違いで、正しい回避策は応答ヘッダやメタタグで文字コードの指定をきちんとするということになると思います。

投稿2021/02/09 01:25

編集2021/02/09 03:45
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bolshikh_i_mal

2021/02/09 07:12

解決しました!ありがとうございました!
guest

0

下記は正しくない可能性が高いです。
詳しくはツリー内にあるSurferOnWww様のコメントをご確認ください。

asp.net.coreは文字化けするようです。

参考サイト

ファイルをファイルメニューの「名前を付けて保存」で、

エンコード付き(UTF-8 シグネチャ付き)で上書き保存すると、
現象が発生しなくなりました。

エンコーディングに UTF-8 を使うよう指定する

日本語を扱う場合で文字化けが発生する場合は、UTF-8 で統一すると解決できる場合がよくありますので試してみてください。

投稿2021/02/08 07:23

編集2021/02/09 02:06
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/09 02:06 編集

> asp.net.coreは文字化けするようです その言い方は誤解を生むかと思います。 「参考サイト」で問題があったという _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 ではその記事に書いてあったような問題は起こりません。 「参考サイト」の話は Core 2.2 のようですが・・・ 「エンコーディングに UTF-8 を使うよう指定する」の話は .NET Framework の ASP.NET の話で ASP.NET Core は関係ないです。
退会済みユーザー

退会済みユーザー

2021/02/09 02:06

ご指摘ありがとうございます。 私の回答は問題が解決していないため誤った回答として追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問