我有这部分代码
Response.Charset = _encodingcode;
Response.AddHeader("Content-Encoding", _encodingcode);
Response.HeaderEncoding = Encoding.GetEncoding(_encodingcode);
Response.ContentEncoding = Encoding.GetEncoding(_encodingcode);
Response.ContentType = mimeType;
return File(_filedata, mimeType, $"{id}{_extension}");
但是在下载文件时,记事本的编码总是ANSI
记
事本只接收_filedata字节,这些字节作为文件保存到磁盘,并在第三个参数中指定名称,但既不是mimeType,也不是响应标头或正文的任何元素,这就是为什么指定编码不起作用。
您可以通过在字节流的开头添加字节顺序标记 (BOM( 来向记事本提供有关某些编码的提示:
- 对于 UTF-8 - 0xEF,0xBB,0xBF
- 对于 UTF-16/32 - 0xFF,0xFE
除此之外,没有办法告诉记事本它应该使用什么编码。
默认情况下,如果在编码中提供不正确的文本,则每个编码都是 ANSI,它将作为 ANSI。改变用途的正确方法
Context.Response.Charset = Encoding.UTF8.WebName;
如果你想要utf8,请这样做
Encoding encoding = Encoding.UTF8;
StreamWriter writer = new StreamWriter("Encoding.html", false, encoding);
writer.WriteLine("<html><head>");
// Write charset attribute to the html file.
// The value of charset is returned by the WebName property.
writer.WriteLine("<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=" +
encoding.WebName +"">");
writer.WriteLine("</head><body>");
writer.WriteLine("<p>" + HttpUtility.HtmlEncode(encoding.EncodingName) + "</p>");
writer.WriteLine("</body></html>");
writer.Flush();
writer.Close();