视图中的重音字符未正确呈现。

4
我正在使用 ServiceStack (v3.9.44.0) 作为一个 Windows 服务(目标是 .Net4.5),并且我使用 Razor 来让 ServiceStack 生成和提供 HTML。虽然一切运行良好,但有一个奇怪的问题:视图 .cshtml 中的硬编码 Unicode 字符串似乎无法正确呈现。下面是我的意思:

Accents in Views are not rendered properly

项目视图的结构是规范的:

Views project structure

具有_Layout.cshtml的:

<!doctype html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    </head>
    <body>
        <p>Accents in \Views\_Layout.cshtml: à é ë ô</p>

        @RenderBody()
    </body>
</html>

Articles.cshtml

@inherits ViewPage<List<PrepaService.Article>>

<p>Accents in \Views\Articles.cshtml: à é ë ô</p>

Table with code-injected list of items:
<table>
    @foreach(var a in Model) {
        <tr>
            <td>@a.Description</td>
        </tr>
    }
</table>

两个文件都以无BOM的UTF8格式正确保存。

我也尝试添加以下内容,但并没有改变任何东西:

SetConfig(new EndpointHostConfig {
    AppendUtf8CharsetOnContentTypes = new HashSet<string> { ContentType.Html }
});

总结一下:

  • 我对所有文件使用无BOM的UTF8编码,并明确指定charset=utf-8内容类型定义。

  • 这适用于在_Layout.cshtml中呈现的任何内容,以及由视图模板内部的代码注入的任何内容。

  • 但是它不适用于视图模板中的硬编码字符串

参考资料:

1个回答

6

好的,回答自己的问题以防有人遇到类似的问题:

  • Razor似乎要求所有文件均为UTF8BOM。

我被其中一篇参考文献误导了,但找到了一个类似问题的答案

现在它可以正常工作了。


相关提示,以下是如何将BOM添加到所有razor文件的方法: sed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' *.cshtml。它可以处理带或不带bom的文件。 - oligofren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接