4

我将ServiceStack (v3.9.44.0) 用作 Windows 服务(针对 .Net4.5),并使用Razor让 ServiceStack 生成和提供 HTML。

一切运行良好,但有一个奇怪的问题:视图.cshtml中的硬编码 unicode 字符串似乎没有正确呈现。
这就是我的意思:

视图中的口音未正确呈现

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

查看项目结构

存在_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 }
});

所以,回顾一下:

  • 我对所有文件和显式charset=utf-8内容类型定义使用无 BOM 的 UTF8 编码。

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

  • 但它不适用于 View templates 中的硬编码字符串

参考:

4

1 回答 1

6

好的,如果有人偶然发现类似问题,请回答我自己的问题:

  • Razor 似乎要求所有文件都是带有BOM 的 UTF8。

我显然被其中一个参考资料误导了,但找到了类似问题的答案

它现在可以正常工作。

于 2013-05-09T03:01:33.017 回答