.net Core view视图中非英文字符会被编码问题

在做.net core视图开发中发现所有的非英文字符都被转成了类似于美国的字符,虽然网页可以正常显示但感觉这会对搜索引擎不友好。于是开始查找解决方案。

先说下这种字符是什么。

有时会在HTML文档中看到形如:

  1. ∑
  2. ∑
  3. ∑

这样的字符序列,其实该序列是HTML/XML文档中的转义序列,它们都指代求和符号∑

这三种转义序列都称为character reference(字符引用)

  • 前两种称为numeric character reference (NCR—字符数值引用),数字取值为目标字符的Unicode code point,以&#开头的后接十进制数字,以&#x开头的后接十六进制数字。
  • 最后一种是character entity reference(字符实体引用),后接预先定义的实体名称。

解决方案:

1.在 Startup.cs 的 ConfigureServices() 方法中添加下面的一行代码:

services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.All));

2.直接配置services

services.Configure<WebEncoderOptions>(options =>
{
      options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All);
});

3.也是配置services

services.Configure<WebEncoderOptions>(options =>
    options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.BasicLatin,
        UnicodeRanges.CjkUnifiedIdeographs));

造成这个问题的大致原因为DefaultHtmlEncoder在初始化时用了UnicodeRanges.BasicLatin,代码如下:

internal readonly static DefaultHtmlEncoder Singleton = new DefaultHtmlEncoder(new TextEncoderSettings(UnicodeRanges.BasicLatin));

github上此问题的链接:https://github.com/aspnet/HttpAbstractions/issues/315

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注