razor page (blazor) 正在对字符进行编码

Posted

技术标签:

【中文标题】razor page (blazor) 正在对字符进行编码【英文标题】:razor page (blazor) is encoding the characters 【发布时间】: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 中尝试过。 【参考方案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

【讨论】:

以上是关于razor page (blazor) 正在对字符进行编码的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Blazor 中创建 Razor 页面列表

如何在同一 Blazor 页面上的 Razor 组件之间传递数据?

如何将可操作的控制字符从 JSON 文本元素传递到 razor 组件 Blazor 变量

Blazor DI 在 .razor 和商务类中的工作方式不同。为啥?

如何在 Razor Page OnInitialized 事件中使用 404 路由

从 Blazor 组件 (.razor) 重定向到 Razor 页面 (.cshtml) [服务器端]