MVC 3剃刀页面编码为UTF 8个示出了编码的字符(MVC 3 Razor page encode

2019-09-19 14:39发布

我有一个的VirtualPathProvider这需要源代码,从我的DB作为一个纯字符串,它编码成UTF-8。

例如:

public override Stream Open()
{
  MemoryStream result = new MemoryStream();

  result = new MemoryStream(Encoding.UTF8.GetBytes(_sourceCode));

  return result;
}

然后,我有有它的字符集为UTF-8的布局母版页

<meta charset="utf-8">

然后,将母版页调用@RenderBody()这得到我的VirtualPathProvider页面并输出到浏览器。

问题是,它输出其编码的字符的页面:

愿望变为wünschte

我究竟做错了什么?

TLDR:

我想wünschte显示,而不是wünschte。 从DB的纯字符串是wünschte,但一旦它来自内存流在我的网页就变成wünschte。

Answer 1:

正如有人谁与此挣扎今天用自己VirtualPathProvider实施,事实证明,剃刀真正想要的字节顺序标记。 您可以通过调用强制此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);
}

如果BOM是不存在的,剃刀似乎默认为当前代码页,而不是UTF8。 上述固定对我来说。

在上面的例子中,你会更换this.Template在我的实现与_sourceCode在原来的问题。



文章来源: MVC 3 Razor page encoded as utf 8 shows encoded characters