Forhindre japansk output som HTML i forhold til den faktiske tilstandsreference (se numeriske tegn)

Dato for oprettelse af side :

Miljø

Visual Studio
  • Visual Studio 2019
ASP.NET Kerne
  • 3.1 (Barberbladsside, MVC)

Japansk dynamisk arrangeret i programmet er output som en reference til den faktiske situation.

Index.cshtmlLad os få vist dem, der gik direkte ind på japansk, og dem, der udskriver japansk ved hjælp af ViewData, på følgende måde.

<!-- 省略 -->

<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>

Angiv japansk til ViewData på programsiden.

Index.cshtml.cs (til Razor-sider)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

HomeController .cs (til MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

Når jeg kører fejlfinding, vises begge på japansk korrekt.

Men hvis du ser på sidens kilde i en webbrowser, kan du se, at det japanske output i ViewData er output med en reference fra den virkelige verden (se numeriske tegn).

En reference fra den virkelige verden (se numeriske tegn) er et alfanumerisk alternativt tegn, der bruges, når du vil repræsentere Unicode-tegn i et miljø, der kun kan behandle alfanumeriske tegn eller kun vise bestemte sprog. Bogstavet "a" #x3042 #x3042 er f.eks. Det vises som .

En typisk webbrowser koder og viser tegn korrekt, selvom html indeholder referencer fra den virkelige verden. Brugerne er ofte uvidende om den faktiske situation referencer.

Grundlæggende vises det korrekt i en webbrowser, så der er ikke noget problem, som det er. Da antallet af tegn output stiger, og det er svært at læse, når man ser på HTML under udviklingen, kan det være output på japansk, som det er på følgende måde.

Forhindre japansk i at blive udskrevet med referencer fra den virkelige verden (se numeriske tegn)

Hvis du vil starte.cs skal du blot føje koden til filen på følgende måde:

// 追加
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.ConfigureServices I services.Configure<WebEncoderOptions> metoden skal du kalde metoden, options.TextEncoderSettings Angiv TextEncoderSettings en forekomst af til .

Hvis du angiver UnicodeRanges.All argumentet, konverteres alle tegn ikke til referencer fra den virkelige verden og udskrives, som de er.

Hvis du angiver individuelle områder, som du ikke vil UnicodeRanges.All konvertere, skal du angive en eller flere andre værdier. Men dybest set, medmindre du har en bestemt UnicodeRanges.All grund, kan du angive .

Hvis du rent faktisk kører det og bekræfte det, kan du se, at japansk er output direkte uden at henvise til den faktiske situation.