Gre*_*reg 14 asp.net encoding response response.write
我有以下代码:
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/rtf; charset=UTF-8";
context.Response.Charset = "UTF-8";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.AddHeader("Content-disposition", "attachment;filename=lista_obecnosci.csv");
context.Response.Write("??????ó????????Ó?");
}
Run Code Online (Sandbox Code Playgroud)
当我尝试打开生成的csv文件时,我得到以下行为:
我想在我的字符串前写下那些特殊的编码信息字符,即
context.Response.Write((char)0xef);
context.Response.Write((char)0xbb);
context.Response.Write((char)0xbf);
Run Code Online (Sandbox Code Playgroud)
但那不会有任何好处.响应流将其视为普通数据并将其转换为不同的数据.
我很感激这方面的帮助.
Ala*_*ore 23
您所谓的"编码信息"实际上就是一个BOM.我怀疑每个"角色"都是分开编码的.要手动编写BOM,您必须将其写为三个字节,而不是三个字符.我不熟悉.NET I/O类,但是应该有一个方法可以使用byte或byte []参数并将它们直接写入文件.
顺便说一句,UTF-8 BOM是可选的; 实际上,Unicode Consortium不鼓励使用它.如果您没有特定的理由使用它,请省去一些麻烦并将其遗漏.
编辑:我只记得你也可以编写实际的BOM 字符,'\uFEFF'以及让编码器处理:
context.Response.Write('\uFEFF');
Run Code Online (Sandbox Code Playgroud)
Col*_*n K 17
我遇到了同样的问题,这是我的解决方案:
context.Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
context.Response.Write("??????ó????????Ó?");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26436 次 |
| 最近记录: |