Mencegah keluaran Jepang sebagai HTML dari referensi kondisi aktual (lihat karakter numerik)

Tanggal pembuatan halaman :

Lingkungan

Visual Studio
  • Studio Visual 2019
ASP.NET Inti
  • 3.1 (Halaman silet, MVC)

Bahasa Jepang yang disusun secara dinamis dalam program ini adalah output sebagai referensi ke situasi aktual.

Index.cshtmlMari kita tampilkan yang masuk ke bahasa Jepang langsung ke dalam dan yang output Jepang menggunakan ViewData sebagai berikut.

<!-- 省略 -->

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

Di sisi program, atur bahasa Jepang ke ViewData.

Index.cshtml.cs (untuk halaman Razor)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

HomeController .cs (untuk MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

Ketika saya menjalankan debugging, keduanya ditampilkan dalam bahasa Jepang dengan benar.

Namun, jika Anda melihat sumber halaman di browser Web, Anda dapat melihat bahwa output Jepang di ViewData adalah output dengan referensi dunia nyata (lihat karakter numerik).

Referensi dunia nyata (lihat karakter numerik) adalah karakter alternatif alfanumerik yang digunakan saat Anda ingin mewakili karakter Unicode di lingkungan yang hanya dapat memproses karakter alfanumerik atau hanya menampilkan bahasa tertentu. Misalnya, huruf "a" adalah "&#x3042;" dalam referensi situasi aktual (lihat #x3042 karakter). itu akan ditampilkan sebagai .

Browser Web yang khas mengkodekan dan menampilkan karakter dengan benar bahkan jika html berisi referensi dunia nyata. Pengguna sering tidak menyadari referensi situasi aktual.

Pada dasarnya, itu ditampilkan dengan benar di browser Web, sehingga tidak ada masalah apa adanya. Karena jumlah output karakter meningkat dan sulit untuk dibaca ketika melihat HTML selama pengembangan, itu bisa menjadi output dalam bahasa Jepang seperti halnya dengan cara berikut.

Mencegah bahasa Jepang dicetak dengan referensi dunia nyata (lihat karakter numerik)

Untuk memulai.cs anda cukup menambahkan kode ke file sebagai berikut:

// 追加
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 Dalam services.Configure<WebEncoderOptions> metode, panggil metode, options.TextEncoderSettings Atur TextEncoderSettings instance ke .

Jika Anda mengatur UnicodeRanges.All argumen, semua karakter tidak akan dikonversi ke referensi dunia nyata dan akan keluaran apa adanya.

Jika Anda menentukan rentang individual yang tidak ingin Anda UnicodeRanges.All konversi, Anda akan menentukan satu atau beberapa nilai lainnya. Namun, pada dasarnya, kecuali Anda memiliki UnicodeRanges.All alasan tertentu, Anda mungkin ingin menentukan .

Jika Anda benar-benar menjalankannya dan mengonfirmasinya, Anda dapat melihat bahwa bahasa Jepang adalah output secara langsung tanpa mengacu pada situasi yang sebenarnya.