वास्तविक स्थिति संदर्भ से एचटीएमएल के रूप में जापानी उत्पादन को रोकें (संख्यात्मक वर्ण देखें)

पेज निर्माण की तारीख :

पर्यावरण

विजुअल स्टूडियो
  • विजुअल स्टूडियो 2019
ASP.NET कोर
  • 3.1 (रेजर पेज, एमवीसी)

जापानी गतिशील कार्यक्रम में व्यवस्था वास्तविक स्थिति के लिए एक संदर्भ के रूप में उत्पादन है।

Index.cshtmlआइए उन लोगों को प्रदर्शित करें जो सीधे जापानी में प्रवेश करते हैं और जो जापानी को इस प्रकार ViewData का उपयोग करके आउटपुट करते हैं।

<!-- 省略 -->

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

कार्यक्रम की ओर, जापानी को व्यूडेटा सेट करें।

Index.cshtml.cs (उस्तरा पृष्ठों के लिए)

// 省略

public class IndexModel : PageModel
{
  // 省略

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

होमकंट्रोलर .cs (एमवीसी के लिए)

// 省略

public class HomeController : Controller
{
  // 省略

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

जब मैं डिबगिंग चलाता हूं, तो दोनों जापानी में सही ढंग से प्रदर्शित होते हैं।

हालांकि, यदि आप वेब ब्राउज़र में पृष्ठ के स्रोत को देखते हैं, तो आप देख सकते हैं कि ViewData में जापानी आउटपुट वास्तविक दुनिया के संदर्भ (संख्यात्मक पात्रों को देखें) के साथ आउटपुट है।

एक वास्तविक दुनिया संदर्भ (संख्यात्मक पात्रों को देखें) एक अल्फान्यूमेरिक वैकल्पिक चरित्र है जिसका उपयोग तब किया जाता है जब आप ऐसे वातावरण में यूनिकोड पात्रों का प्रतिनिधित्व करना चाहते हैं जो केवल अल्फान्यूमेरिक पात्रों को संसाधित कर सकते हैं या केवल कुछ भाषाओं को प्रदर्शित कर सकते हैं। उदाहरण के लिए, वास्तविक स्थिति संदर्भ में "ए" पत्र "एंड #x3042;" है (#x3042 वर्ण देखें)। यह रूप में प्रदर्शित किया जाएगा .

एक ठेठ वेब ब्राउज़र एन्कोड करता है और पात्रों को सही ढंग से प्रदर्शित करता है, भले ही एचटीएमएल में वास्तविक दुनिया के संदर्भ होते हैं। उपयोगकर्ता अक्सर वास्तविक स्थिति संदर्भों से अनजान होते हैं।

असल में, यह एक वेब ब्राउज़र में सही ढंग से प्रदर्शित किया जाता है, इसलिए इसमें कोई समस्या नहीं है। चूंकि पात्रों की संख्या बढ़ जाती है और विकास के दौरान एचटीएमएल को देखते समय पढ़ना मुश्किल होता है, इसलिए यह जापानी में आउटपुट हो सकता है क्योंकि यह निम्नलिखित तरीके से है।

जापानी को वास्तविक दुनिया के संदर्भों के साथ मुद्रित होने से रोकें (संख्यात्मक पात्र देखें)

शुरू करने के लिए.cs सिर्फ फ़ाइल में कोड को इस प्रकार जोड़ें:

// 追加
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 विधि services.Configure<WebEncoderOptions> में, विधि को कॉल करें, options.TextEncoderSettings का एक उदाहरण निर्धारित TextEncoderSettings करें ।

यदि आप तर्क सेट UnicodeRanges.All करते हैं, तो सभी पात्रों को वास्तविक दुनिया के संदर्भों में परिवर्तित नहीं किया जाएगा और जैसा कि आउटपुट होगा।

यदि आप व्यक्तिगत श्रेणियों को निर्दिष्ट करते हैं जिन्हें आप परिवर्तित नहीं UnicodeRanges.All करना चाहते हैं, तो आप एक या अधिक अन्य मूल्यों को निर्दिष्ट करेंगे। हालांकि, मूल रूप से, जब तक आपके पास कोई विशिष्ट कारण नहीं UnicodeRanges.All है, आप निर्दिष्ट करना चाह सकते हैं।

यदि आप वास्तव में इसे चलाते हैं और इसकी पुष्टि करते हैं, तो आप देख सकते हैं कि जापानी वास्तविक स्थिति का जिक्र किए बिना सीधे उत्पादन कर रहा है।