Empêcher la sortie japonaise en HTML de la référence réelle de l’état (voir caractères numériques)

Date de création de la page :

environnement

Studio visuel
  • Studio visuel 2019
ASP.NET noyau
  • 3.1 (Page Razor, MVC)

Japonais dynamiquement disposés dans le programme est la sortie comme une référence à la situation réelle.

Index.cshtmlAffichons ceux qui sont entrés en japonais directement et ceux qui extrayent japonais en utilisant ViewData comme suit.

<!-- 省略 -->

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

Du côté du programme, réglez le japonais sur ViewData.

Index.cshtml.cs (pour les pages Razor)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

HomeController .cs (pour MVC)

// 省略

public class HomeController : Controller
{
  // 省略

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

Lorsque j’exécute le débogage, les deux sont affichés en japonais correctement.

Toutefois, si vous regardez la source de la page dans un navigateur Web, vous pouvez voir que la sortie japonaise dans ViewData est sortie avec une référence du monde réel (voir caractères numériques).

Une référence du monde réel (voir caractères numériques) est un caractère alternatif alphanumérique utilisé lorsque vous souhaitez représenter les caractères Unicode dans un environnement qui ne peut traiter que des caractères alphanumériques ou afficher uniquement certaines langues. Par exemple, la lettre « a » est « & #x3042 ; » dans la référence de situation réelle (voir #x3042 caractères). il sera affiché comme .

Un navigateur Web typique code et affiche correctement les caractères même si html contient des références réelles. Les utilisateurs ne sont souvent pas au courant des références de situation réelles.

Fondamentalement, il est affiché correctement dans un navigateur Web, il n’y a donc pas de problème tel qu’il est. Étant donné que le nombre de caractères de sortie augmente et qu’il est difficile à lire lorsque vous regardez html pendant le développement, il peut être sortie en japonais comme il est de la manière suivante.

Empêcher les Japonais d’être imprimés avec des références réelles (voir caractères numériques)

Pour commencer.cs il suffit d’ajouter le code au fichier comme suit :

// 追加
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 Dans la services.Configure<WebEncoderOptions> méthode, appelez la méthode, options.TextEncoderSettings Définissez TextEncoderSettings une instance de .

Si vous UnicodeRanges.All définissez l’argument, tous les personnages ne seront pas convertis en références du monde réel et seront la sortie tel qu’il est.

Si vous spécifiez des plages individuelles que vous ne UnicodeRanges.All souhaitez pas convertir, vous spécifierez une ou plusieurs autres valeurs. Toutefois, fondamentalement, sauf si vous avez une raison UnicodeRanges.All spécifique, vous pouvez spécifier .

Si vous l’exécutez réellement et le confirmez, vous pouvez voir que le japonais est sortie directement sans se référer à la situation réelle.