Bob*_*Bob 4 encoding utf-8 razor asp.net-mvc-3
我有一个VirtualPathProvider,它将我的数据库中的源代码作为普通字符串,并将其编码为UTF8.
例如:
public override Stream Open()
{
MemoryStream result = new MemoryStream();
result = new MemoryStream(Encoding.UTF8.GetBytes(_sourceCode));
return result;
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个布局母版页,它的字符集为UTF 8
<meta charset="utf-8">
Run Code Online (Sandbox Code Playgroud)
然后,母版页调用@RenderBody()哪个获取我的VirtualPathProvider页面并将其输出到浏览器.
问题是它正在输出带有编码字符的页面:
wünschte成为wünschte
我究竟做错了什么?
TLDR:
我希望wünschte显示而不是wünschte.来自DB的纯字符串是wünschte,但是一旦它从内存流进入我的页面就变成了wünschte.
作为今天用自己的VirtualPathProvider实现来解决这个问题的人,事实证明Razor 真的想要字节顺序标记.你可以通过电话强制这个GetPreamble().
using System.Linq; // for Concat() because I am lazy
public override Stream Open()
{
var template = Encoding.UTF8
.GetBytes(this.Template);
var buffer = Encoding.UTF8
.GetPreamble()
.Concat(template)
.ToArray();
return new MemoryStream(buffer);
}
Run Code Online (Sandbox Code Playgroud)
如果BOM不存在,Razor似乎默认为当前代码页而不是UTF8.以上为我修好了.
在上面的示例中,您将在原始问题中替换this.Template我的实现_sourceCode.