NDW

アプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング ASP.NET Core 実装技術

ASP.NET Core: 日本語の文字化け

投稿日:

ダイジェスト

Visual Studio 2019で作成したASP.NET Coreプロジェクトで、プログラム(Razor)から日本語を出力するとHTMLエンコードされてしまいます。例えば「さしすせそ」を出力した場合は「さしすせそ」となってしまいます。
ブラウザや開発者ツール(F12)では正常に表示されるので分からないのですが、実際のソースコードはこのようにHTMLエンコードで出力されています。なお、cshtml上の日本語は問題なく、Razorからの出力のみがこの問題の対象です。

これは次のようにエンコーダの設定を変更することで対応できます。

public void ConfigureServices(IServiceCollection services)
{
    ...
    // HTMLのエンコーディングをUTF-8にする(日本語のHTMLエンコード防止)
    services.Configure<WebEncoderOptions>(options => {
        options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All);
    });
    ...

エンコーダのエンコード対象(エスケープしない文字群)に日本語が含まれていないためエスケープ(HTMLエンコード)されてしまいます。そのため、エンコード対象として、(日本語も含む)ユニコードの全ての文字、を指定しています。
WebEncoderOptionsのTextEncoderSettingsは、エンコーダーでエスケープせずに表現できるコード ポイントを指定します。
UnicodeRangesを使って、ユニコードの範囲を指定しています。

詳細

例えば次のようなビューを作成して実行してみます。

@{
    ViewData["Title"] = "たいとる";
}

<div class="text-center">
    <h1 class="display-4">あいうえお</h1>
    <p>かきくけこ</p>
    <p>@("さしすせそ")</p>

    <button onclick="alert('@("アラート!")');">ボタン</button>
</div>

Chromeで確認してみます。
見た目上、次のように特に問題ありません。
開発者モード(Elementsタブ)で確認しても特に問題があるように見えません。


しかしながら、開発者モード(Sourcesタブ)や「ページのソースを表示」で確認するとHTMLエンコードされています。








-1. システムエンジニアリング, ASP.NET Core, 実装技術

関連記事

.NET Core(C#): DateTimeの使い方サンプル

はじめに サンプルは.NET Core 3.1(Windows 10)で動作確認しています。 型が分かりやすいよう変数宣言ではvarを使用していません。実装時はvarを使用することをおすすめします。 …

Excelで大量データから重複値を検索する方法

100万件程の大量データの中で重複するデータを見つける方法を紹介します。 前提条件 検証で使用した環境は次の通りです。 RAND()関数で作成した約100万件(Excelの最大行数となる1,048,5 …

検証用のリバースプロキシサーバの構築方法

リバースプロキシサーバで設定されるHTTPヘッダを使ったアプリの機能が必要になる場合がありますが、開発環境にリバースプロキシサーバが用意されることは経験的にほとんどなく、動作確認に困ることが多々ありま …

パスワード情報の保管方式の比較

Webアプリの開発でパスワードを使ったユーザ認証を設計・実装する機会がよくある。 後輩への説明や勉強会ネタとして、この辺の話を纏めてみようと思う。 概要 オンラインバンキングやネットショッピングのサイ …

マスタデータ生成ツール

開発や結合試験、本番環境等で使用するマスタデータをExcelで管理することがあります。 そのようなExcelファイルからDBに登録するためのインサート文を作成するために、いつもツールに悩むので作成して …