ダイジェスト
Visual Studio 2019で作成したASP.NET Coreプロジェクトで、プログラム(Razor)から日本語を出力するとHTMLエンコードされてしまいます。例えば「さしすせそ」を出力した場合は「さしすせそ」となってしまいます。
ブラウザや開発者ツール(F12)では正常に表示されるので分からないのですが、実際のソースコードはこのようにHTMLエンコードで出力されています。なお、cshtml上の日本語は問題なく、Razorからの出力のみがこの問題の対象です。
これは次のようにエンコーダの設定を変更することで対応できます。
1 2 3 4 5 6 7 8 | public void ConfigureServices(IServiceCollection services) { ... // HTMLのエンコーディングをUTF-8にする(日本語のHTMLエンコード防止) services.Configure<WebEncoderOptions>(options => { options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All); }); ... |
エンコーダのエンコード対象(エスケープしない文字群)に日本語が含まれていないためエスケープ(HTMLエンコード)されてしまいます。そのため、エンコード対象として、(日本語も含む)ユニコードの全ての文字、を指定しています。
WebEncoderOptionsのTextEncoderSettingsは、エンコーダーでエスケープせずに表現できるコード ポイントを指定します。
UnicodeRangesを使って、ユニコードの範囲を指定しています。
詳細
例えば次のようなビューを作成して実行してみます。
1 2 3 4 5 6 7 8 9 10 11 | @{ ViewData["Title"] = "たいとる"; } <div class="text-center"> <h1 class="display-4">あいうえお</h1> <p>かきくけこ</p> <p>@("さしすせそ")</p> <button onclick="alert('@("アラート!")');">ボタン</button> </div> |
Chromeで確認してみます。
見た目上、次のように特に問題ありません。
開発者モード(Elementsタブ)で確認しても特に問題があるように見えません。
しかしながら、開発者モード(Sourcesタブ)や「ページのソースを表示」で確認するとHTMLエンコードされています。