gpt4 book ai didi

c# MemoryStream 编码与。编码.GetChars()

转载 作者:太空狗 更新时间:2023-10-29 18:27:24 25 4
gpt4 key购买 nike

我正在尝试从数据库中复制一个字节流,对其进行编码并最终将其显示在网页上。但是,我注意到以不同方式对内容进行编码的不同行为(注意:我使用的是具有拉丁字符集且不支持中文字符的“西欧”编码):

var encoding = Encoding.GetEncoding(1252 /*Western European*/);
using (var fileStream = new StreamReader(new MemoryStream(content), encoding))
{
var str = fileStream.ReadToEnd();
}

对比

var encoding = Encoding.GetEncoding(1252 /*Western European*/);
var str = new string(encoding.GetChars(content));

如果内容包含中文字符,则第一段代码将生成类似“D$教学而设计的”的字符串,这是不正确的,因为编码不应该支持这些字符,而第二段代码将生成“D $æ•™å¦è€Œè®¾è®¡çš„"是正确的,因为它们都在西欧字符集中。

这种行为差异的解释是什么?

最佳答案

StreamReader 构造函数将在流中查找 BOM 并根据它们设置其编码,即使您传递了不同的编码也是如此。

它会在您的数据中看到 UTF8 BOM 并正确使用 UTF8。

要防止这种行为,请将 false 作为第三个参数传递:

var fileStream = new StreamReader(new MemoryStream(content), encoding, false)

关于c# MemoryStream 编码与。编码.GetChars(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13196649/

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