asp.net mvc @推出了错误的unicode字符串

时间:2014-01-30 10:18:19

标签: c# asp.net asp.net-mvc unicode

 <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
 <meta name="description" content="@("Du lịch chữa bệnh ở Thái Lan là hình thức du lịch đẳng cấp kết hợp du lịch, spa và chữa bệnh")" />

为什么它会输出错误的unicode字符串

 <meta name="description" content="Du lịch chữa bệnh ở Th&#225;i Lan l&#224; h&#236;nh thức du lịch đẳng cấp kết hợp du lịch, spa v&#224; chữa bệnh" />

到目前为止,我尝试了新的HtmlString("Du lịch...")Html.Raw("Du...")并且没有运气

这有什么问题?请给出建议。我正在使用asp.net mvc 5.0

没有@,它就可以正常工作了!

其他帖子的结果相同但没有答案,Disable encoding of unicode characters in ASP.NET-MVC3

3 个答案:

答案 0 :(得分:1)

您可以在 ConfigureServices 方法中配置默认​​编码行为:

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

这将在 html 页面上呈现非编码的 unicode 字符。 来源https://github.com/aspnet/HttpAbstractions/issues/315

答案 1 :(得分:0)

这是因为html编码razor默认做html编码。试试这个

content =“@ Html.Raw(”DulịchchữabệnhởTháiLanlàhìnhthứcdulịchđẳngcấpkếthợpdulịch,spavàchữabệnh“)”

@ Html.Raw( “”);将输入字符串渲染为原始html

答案 2 :(得分:0)

字符串没有错。任何网络浏览器都会将&#225;读取为角色á。在信息集方面,浏览器将解析为DOM,两行:

<meta name="description" content="Du lịch chữa bệnh ở Th&#225;i Lan l&#224; h&#236;nh thức du lịch đẳng cấp kết hợp du lịch, spa v&#224; chữa bệnh" />
<meta name="description" content="Du lịch chữa bệnh ở Thái Lan là hình thức du lịch đẳng cấp kết hợp du lịch, spa và chữa bệnh" />

完全相同。

ASP.NET的默认HTML编码器选择为U + 0080到U + 00FF范围内的字符编写&#...;字符引用而不是其他Unicode字符,这有点奇怪,但通常HTML编码器可以选择编码它所喜欢的任何字符,输出仍然是正确的。

nemesv在您链接的问题中的答案显示了如何通过覆盖encoderType来改变此行为,但几乎没有任何理由需要关注。任何其他消耗输出的工具都不会将属性值中的&#225;á视为同一个字符。