gpt4 book ai didi

asp.net-mvc-3 - 编码为 utf 8 的 MVC 3 Razor 页面显示编码字符

转载 作者:行者123 更新时间:2023-12-02 18:47:02 27 4
gpt4 key购买 nike

我有一个 VirtualPathProvider,它将我的数据库中的源代码作为纯字符串并将其编码为 UTF8。

例如:

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 becomes wünschte

我做错了什么?

TLDR:

我希望显示 wünschte 而不是 wünschte。来自数据库的纯字符串是 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);
}

如果 BOM 不存在,Razor 似乎默认使用当前代码页而不是 UTF8。上面的内容为我解决了这个问题。

在上面的示例中,您可以将我的实现中的 this.Template 替换为原始问题中的 _sourceCode

关于asp.net-mvc-3 - 编码为 utf 8 的 MVC 3 Razor 页面显示编码字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11519992/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com