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