Impedir a saída japonesa como HTML de referência de condição real (ver caracteres numéricos)

Data de criação de página :

ambiente

Estúdio Visual
  • Visual Studio 2019
Núcleo ASP.NET
  • 3.1 (Página de navalha, MVC)

Japonês organizado dinamicamente no programa é a saída como uma referência à situação real.

Index.cshtmlVamos exibir aqueles que entraram em japonês diretamente e aqueles que lançam japonês usando o ViewData da seguinte forma.

<!-- 省略 -->

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

No lado do programa, defina japonês para ViewData.

Index.cshtml.cs (para páginas de 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 から日本語を表示させます。";
  }
}

Quando eu execur depuração, ambos são exibidos em japonês corretamente.

No entanto, se você olhar para a fonte da página em um navegador da Web, você pode ver que a saída japonesa no ViewData é saída com uma referência do mundo real (ver caracteres numéricos).

Uma referência do mundo real (ver caracteres numéricos) é um caractere alternativo alfanumérico usado quando você quer representar caracteres Unicode em um ambiente que só pode processar caracteres alfanuméricos ou exibir apenas certas línguas. Por exemplo, a letra "a" é "&#x3042;" na referência de situação real (ver #x3042 caracteres). será exibido como .

Um navegador típico codifica e exibe caracteres corretamente, mesmo que o html contenha referências do mundo real. Os usuários muitas vezes desconhecem as referências reais da situação.

Basicamente, ele é exibido corretamente em um navegador da Web, então não há nenhum problema como ele é. Uma vez que o número de caracteres de saída aumenta e é difícil de ler quando se olha para HTML durante o desenvolvimento, ele pode ser saída em japonês como é da maneira seguinte.

Evite que os japoneses sejam impressos com referências do mundo real (ver caracteres numéricos)

Para começar.cs basta adicionar o código ao arquivo da seguinte forma:

// 追加
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 No services.Configure<WebEncoderOptions> método, chame o método, options.TextEncoderSettings Defina TextEncoderSettings uma instância de .

Se você definir UnicodeRanges.All o argumento, todos os caracteres não serão convertidos em referências do mundo real e serão produzidos como está.

Se você especificar faixas individuais que não UnicodeRanges.All deseja converter, você especificará um ou mais outros valores. No entanto, basicamente, a menos que você tenha uma UnicodeRanges.All razão específica, você pode querer especificar .

Se você realmente executá-lo e confirmá-lo, você pode ver que o japonês é saída diretamente sem se referir à situação real.