アプリ開発ときどきアウトドア

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

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エンコードされています。




(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

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

執筆者:

関連記事

ASP.NET Core: ファイルアップロードの考察

ASP.Net Core(3.1)を使ったファイルアップロードに関する考察です。 元ネタはマイクロソフトのサイトですが、記載内容が私には難しかったり、業務で使用するために悩む部分があったので独自に纏め …

Javaによるzipファイルの安全な解凍方法

以前、業務アプリ(Java)でzipファイルの操作が必要となったため、Javaにおけるzip圧縮解凍について調査しました。また、zip4jを使った圧縮・解凍についても説明しました。 ここでは、もう少し …

postgresqlでの拡張のインストール

PostgreSQL10で暗号化関数を使用するため拡張(pgcrypto)をインストールした際の出来事を記載します。 事象 pgcryptoの拡張をインストールしたり、インストールの確認を行うと、その …

保守運用

運用 と 保守 の 違い

若い頃は 運用 と 保守 の違いを調べても良くわからなかった… この辺を使い分けられる人をほとんど見たことない… ある事項が運用なのか保守なのかの話をすると認識が合わない&#8 …

slf4jとlog4j2を使たデバッグログの出力方法

Webアプリやスタンドアロンアプリの開発でデバッグログやトレースログを出したい場合があります。 とりあえず、ロガーのログレベルをdebugやtraceに下げればいいや、と設定してもログが出力されない場 …

プロフィール ゆっきーです。
都内でシステムエンジニアをやっています。
もっと詳細を見る