Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#MemoryStream编码与Encoding.GetChars()的比较_C#_Character Encoding_Streamreader - Fatal编程技术网

c#MemoryStream编码与Encoding.GetChars()的比较

c#MemoryStream编码与Encoding.GetChars()的比较,c#,character-encoding,streamreader,C#,Character Encoding,Streamreader,我试图从数据库复制一个字节流,对其进行编码,最后将其显示在网页上。但是,我注意到不同的行为以不同的方式编码内容(注意:我使用的是“西欧”编码,它有一个拉丁字符集,不支持汉字): Vs 如果内容包含汉字,则第一个代码块将生成类似“D”的字符串$教学而设计的", 这是不正确的,因为编码不应支持这些字符,而第二个块将产生“D$æ•”™这是正确的,因为它们都在西欧字符集中 对这种行为差异的解释是什么?StreamReader构造函数将在流中查找BOM并根据BOM设置其编码,即使您传递了不同的编码 它会在

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

Vs

如果内容包含汉字,则第一个代码块将生成类似“D”的字符串$教学而设计的", 这是不正确的,因为编码不应支持这些字符,而第二个块将产生“D$æ•”™这是正确的,因为它们都在西欧字符集中


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

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

它会在数据中看到UTF8 BOM表,并正确使用UTF8

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

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

谢谢!现在它们产生了相同的字符串。出于好奇,您建议使用哪一块代码更好?这两种代码有什么优点或缺点?
var encoding = Encoding.GetEncoding(1252 /*Western European*/);
var str = new string(encoding.GetChars(content));
var fileStream = new StreamReader(new MemoryStream(content), encoding, false)