避免将输出为 HTML 的日语作为实际参考(数字字符引用)

页面创建日期 :

环境

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3.1 (Razor 页面, MVC)

在程序中动态排列的日语作为实际参考输出

显示 Index.cshtml 直接在 中输入日语的内容,以及使用 ViewData 输出的日语输出,如下所示。

<!-- 省略 -->

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

<p>ここに固定文字列の日本語を表示させます。</p>
<p>@ViewData["Message"]</p>

在程序端,将 ViewData 设置为日语。

Index.cshtml.cs( 对于 Razor 页面)

// 省略

public class IndexModel : PageModel
{
  // 省略

  public void OnGet()
  {
    ViewData["Message"] = "ViewData から日本語を表示させます。";
  }
}

HomeController.cs( 对于 MVC)

// 省略

public class HomeController : Controller
{
  // 省略

  public IActionResult Index()
  {
    ViewData["Message"] = "ViewData から日本語を表示させます。";
  }
}

当我运行调试时,两者都正确显示日语。

但是,当您在 Web 浏览器中查看页面源时,您会发现 ViewData 输出的日语是实际引用(请参阅数字字符)。

实际引用(数字字符引用)是一种字母数字替代字符,用于在只能处理字母数字或只能显示特定语言的环境中表示 Unicode 字符。 例如,在实际状态参考(请参阅数字字符)中,"a"一#x3042&"。 显示为 。

典型的 Web 浏览器正确编码和显示字符,即使 HTML 包含实际引用。 用户通常没有意识到实际引用。

基本上,它在 Web 浏览器中正确显示,因此没有问题, 输出的字符数增加,在开发时查看 HTML 时难以阅读,因此您可以通过以下方式以日语输出:

防止日语输出为实际参考(请参阅数字字符)

只需.cs Startup 文件的代码,如下所示:

// 追加
using Microsoft.Extensions.WebEncoders;
using System.Text.Encodings.Web;
using System.Text.Unicode;

// 省略

public class Startup
{
  // 省略

  // このメソッドはランタイムによって呼び出されます。 このメソッドを使用して、コンテナーにサービスを追加します。
  public void ConfigureServices(IServiceCollection services)
  {
    // 省略

    // 全ての文字をが実態参照で出力されないようにする
    // 全てではなく特定の範囲のみをエンコードさせたくない場合は UnicodeRanges.All のプロパティを個別に設定します。
    services.Configure<WebEncoderOptions>(options =>
    {
      options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All);

      // 個別に設定する場合 (例)
      //options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.Hiragana, UnicodeRanges.Katakana);
    });
  }

  // 省略
}

Startup.ConfigureServicesservices.Configure<WebEncoderOptions> 方法中调用方法,然后单击 options.TextEncoderSettings TextEncoderSettings 设置 的实例。

UnicodeRanges.All 设置到参数中时,所有字符将按原样输出,而不是转换为实际引用。

如果要单独指定不转换的范围, UnicodeRanges.All 则指定一个或多个非值。 但是,基本上,除非有特殊原因 UnicodeRanges.All ,否则可以指定 。

实际运行和确认时,您会看到日语直接输出,而不是实际参考。