Impedir a saída japonesa como HTML de referência de condição real (ver caracteres numéricos)
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.cshtml
Vamos 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" é "あ" 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.