Sid*_*awy 8 c# character-encoding streamreader
我试图从数据库中复制字节流,对其进行编码,最后将其显示在网页上.但是,我注意到以不同方式编码内容的不同行为(注意:我使用的是"西欧"编码,它具有拉丁字符集且不支持中文字符):
var encoding = Encoding.GetEncoding(1252 /*Western European*/);
using (var fileStream = new StreamReader(new MemoryStream(content), encoding))
{
var str = fileStream.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)
比.
var encoding = Encoding.GetEncoding(1252 /*Western European*/);
var str = new string(encoding.GetChars(content));
Run Code Online (Sandbox Code Playgroud)
如果内容包含中文字符,则第一个代码块将产生一个类似"D $教学而设计的"的字符串,这是不正确的,因为编码不应该支持这些字符,而第二个块将产生"D $æ• ™å||€Œè®¾è®¡ç"""这是正确的,因为这些都是西欧字符集.
这种行为差异的解释是什么?
SLa*_*aks 10
该StreamReader构造函数将查找流中的材料明细表,并从中设置它的编码,即使你通过不同的编码.
它会在您的数据中看到UTF8 BOM并正确使用UTF8.
要防止此行为,请传递false第三个参数:
var fileStream = new StreamReader(new MemoryStream(content), encoding, false)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10038 次 |
| 最近记录: |