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

TiG*_*reX 4 .net c# razor razor-pages blazor

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

\n

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

\n

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

\n

例如,<div>@variable</div>打印带有编码值的内容,例如programaci&#xF3;n。但使用检查器时,值本身是programaci\xc3\xb3n

\n

但如果我在下面的行中编写 <div>programaci\xc3\xb3n</div>它,它就会正确打印。

\n

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

\n

我也尝试过,meta charset=UTF-8并将文件保存.razor为UTF。就像这篇文章中指定的那样,但这些都不起作用。

\n

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

\n

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

\n

Mik*_*ind 6

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

services.Configure<WebEncoderOptions>(options =>
{
    options.TextEncoderSettings = new TextEncoderSettings(
        UnicodeRanges.BasicLatin,
        UnicodeRanges.Latin1Supplement);
});
Run Code Online (Sandbox Code Playgroud)

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