【问题标题】:razor page (blazor) is encoding the charactersrazor page (blazor) 正在对字符进行编码
【发布时间】:2021-10-16 23:15:49
【问题描述】:

我有一个小网站,当我在网站上执行 Ctrl+U 时,未正确打印 UTF-8 字符。

例如,如果我尝试打印programación,它会打印programación

仅当我打印变量的值时才会发生这种情况,当我对文本进行硬编码时不会发生这种情况。

例如,<div>@variable</div> 打印带有编码值的内容,例如programación。但是值本身,使用检查器是programación

但如果我在下面的行中写了 <div>programación</div>,它会正确打印出来。

我尝试使用httputlity.htmldecode,但得到了相同的结果。

我还尝试了meta charset=UTF-8,并将.razor 文件保存为UTF。就像在this post 中指定的一样,但这些都不起作用。

有什么方法可以正确打印这些字符吗?

如果这很重要,我正在使用 .NET5。

【问题讨论】:

  • 哪个浏览器? (没有复制)。
  • 我在 Firefox、Chrome 和 Edge 中尝试过。

标签: c# .net razor blazor razor-pages


【解决方案1】:

默认情况下,Razor 会编码所有非 ASCII 字符,即Basic Latin range 之外的字符。如果您希望其他范围不受影响,则需要对其进行配置。您可以在 ConfigureServices 方法中通过指定 Razor 应该编码的范围来执行此操作。您遇到问题的字符在 Latin-1 Supplement 范围内,因此您包括:

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

请注意,您在此处设置的任何内容都将覆盖默认设置,这就是为什么您还需要包含UnicodeRanges.BasicLatin 范围的原因。如果您不确定应该包含哪些字符集,可以在此处查看:http://www.unicode.org/charts/。或者,您可以简单地指定UnicodeRanges.All

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多