Împiedicați ieșirea japoneză ca HTML să facă referire la starea reală (a se vedea caracterele numerice)

Data creării paginii :

Mediu

Studio vizual
  • Studio vizual 2019
ASP.NET Core
  • 3.1 (Pagina razor, MVC)

Japoneză dinamic aranjate în program este de ieșire ca o trimitere la situația reală.

Index.cshtmlSă le afișăm pe cele care au intrat direct în japoneză și pe cele care ies în japoneză folosind ViewData după urmează.

<!-- 省略 -->

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

Pe partea de program, setați japoneza la ViewData.

Index.cshtml.cs (pentru pagini razor)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

HomeController .cs (pentru MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

Când rulez depanarea, ambele sunt afișate corect în japoneză.

Cu toate acestea, dacă vă uitați la sursa paginii într-un browser Web, puteți vedea că ieșirea japoneză în ViewData este ieșirea cu o referință din lumea reală (a se vedea caracterele numerice).

O referință din lumea reală (vezi caractere numerice) este un caracter alternativ alfanumeric utilizat atunci când doriți să reprezentați caractere Unicode într-un mediu care poate procesa numai caractere alfanumerice sau poate afișa numai anumite limbi. De exemplu, litera "a" este "#x3042;" în referința situației reale (vezi #x3042 caractere). acesta va fi afișat ca .

Un browser Web tipic codifică și afișează corect caracterele, chiar dacă html conține referințe din lumea reală. Utilizatorii nu sunt adesea conștienți de referințele situației reale.

Practic, este afișat corect într-un browser Web, deci nu există nicio problemă așa este. Deoarece numărul de caractere de ieșire crește și este dificil de citit atunci când se uită la HTML în timpul dezvoltării, acesta poate fi de ieșire în japoneză, deoarece este în felul următor.

Împiedicați imprimarea japoneză cu referințe din lumea reală (a se vedea caracterele numerice)

Pentru a începe.cs trebuie doar să adăugați codul la fișier după urmează:

// 追加
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 În services.Configure<WebEncoderOptions> metodă, apelați metoda, options.TextEncoderSettings Setați TextEncoderSettings o instanță de .

Dacă setați UnicodeRanges.All argumentul, toate caracterele nu vor fi convertite în referințe din lumea reală și vor fi de ieșire așa este.

Dacă specificați zone individuale pe care nu doriți să le UnicodeRanges.All convertiți, veți specifica una sau mai multe alte valori. Cu toate acestea, practic, cu excepția cazului în care aveți un UnicodeRanges.All motiv specific, poate doriți să specificați .

Dacă îl executați efectiv și confirmați-l, puteți vedea că japoneza este ieșire directă fără a face referire la situația reală.