Evitar la salida japonesa como HTML de referencia de condición real (consulte caracteres numéricos)

Fecha de creación de la página :

medio ambiente

Estudio visual
  • Visual Studio 2019
Núcleo de ASP.NET
  • 3.1 (Página de Razor, MVC)

Japonés organizado dinámicamente en el programa se produce como una referencia a la situación real.

Index.cshtmlVamos a mostrar los que entraron en japonés directamente en y los que emiten japonés usando ViewData de la siguiente manera.

<!-- 省略 -->

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

En el lado del programa, establezca japonés en ViewData.

Index.cshtml.cs (para páginas Razor)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

HomeController .cs (para MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

Cuando ejecuto la depuración, ambos se muestran correctamente en japonés.

Sin embargo, si observa el origen de la página en un explorador web, puede ver que la salida japonesa en ViewData se genera con una referencia del mundo real (consulte caracteres numéricos).

Una referencia del mundo real (consulte caracteres numéricos) es un carácter alternativo alfanumérico utilizado cuando se desea representar caracteres Unicode en un entorno que solo puede procesar caracteres alfanuméricos o mostrar solo determinados idiomas. Por ejemplo, la letra "a" es "&#x3042;" en la referencia de situación real (consulte #x3042 caracteres). se mostrará como .

Un navegador web típico codifica y muestra caracteres correctamente incluso si html contiene referencias del mundo real. Los usuarios a menudo no son conscientes de las referencias de situación real.

Básicamente, se muestra correctamente en un navegador web, por lo que no hay ningún problema tal como está. Dado que el número de caracteres de salida aumenta y es difícil de leer al mirar HTML durante el desarrollo, se puede generar en japonés como lo es de la siguiente manera.

Evitar que el japonés se imprima con referencias del mundo real (ver caracteres numéricos)

Para empezar.cs simplemente agregue el código al archivo de la siguiente manera:

// 追加
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 En el services.Configure<WebEncoderOptions> método, llame al método, options.TextEncoderSettings Establezca TextEncoderSettings una instancia de .

Si establece UnicodeRanges.All el argumento, todos los caracteres no se convertirán en referencias del mundo real y se generarán tal cual.

Si especifica rangos individuales que no UnicodeRanges.All desea convertir, especificará uno o varios valores. Sin embargo, básicamente, a menos que tenga una UnicodeRanges.All razón específica, es posible que desee especificar .

Si realmente lo ejecuta y lo confirma, puede ver que el japonés se emite directamente sin hacer referencia a la situación real.