2020年4月6日月曜日

Razorページのソースが文字化けする

正確には文字化けではなくHTMLエンティティ化された状態です。
日本語などが、ソース内で「&#XXXX;」のような形式で表示されます。

例)
ViewModelでプロパティを用意します。

public string TestMessageA { get; set; } = "abcde";
public string TestMessageB { get; set; } = "あいうえお";

RazorPageで表示させます。

TestMessageA=[@Model.TestMessageA]<br/>
TestMessageB=[@Model.TestMessageB]<br/>


画面上は正しく表示されます。

しかし、ソースを確認するとこんな感じで、日本語がHTMLエンティティ化されています。


javascriptなどに値を渡す場合に、問題となることもあるかと思います。
そんな時は以下のように設定します。

Startup.cs

using System.Text.Encodings.Web
using System.Text.Unicode
using Microsoft.Extensions.WebEncoders

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<WebEncoderOptions>(options =>
    {
 options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All);
    });

    // または、

    services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.All));
}