如何添加到ASP.NET响应流编码信息?(How to add encoding informati

2019-07-28 21:03发布

我有以下的代码:

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("ąęćżźń󳥌ŻŹĆŃŁÓĘ");
}

当我尝试打开生成CSV文件,我得到以下行为:

  • 在的Notepad2 - 一切都很好。
  • 在Word - 转换向导打开并询问将文本转换。 这表明UTF-8,这是某种确定。
  • 在Excel中 - 我得到真正的混乱。 可以显示这些人物的波兰无。

我想在我的字符串,即前面写那些特殊的编码信息的字符

context.Response.Write((char)0xef);
context.Response.Write((char)0xbb);
context.Response.Write((char)0xbf);

但不会有什么好处。 响应流被处理,作为正常的数据并将其转换为不同的东西。

我很感激在这一个帮助。

Answer 1:

你所说的“编码信息”有什么实际上是一个BOM。 我怀疑每一这些“字”是越来越单独编码。 手动编写的BOM,你必须把它写成三个字节 ,而不是三个字符。 我不熟悉.NET I / O类,但应该有提供给您的方法,需要一个字节或字节[]参数,并将它们直接写入文件。

顺便说一句,在UTF-8 BOM是可选的; 事实上,它的使用是由Unicode协会气馁。 如果没有特殊原因使用它,保存自己的一些麻烦和离开它。

编辑:我只记得你也可以编写实际的BOM 字符'\uFEFF' ,并让编码器处理:

context.Response.Write('\uFEFF');


Answer 2:

我遇到了同样的问题,这是我的解决方案:

context.Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
context.Response.Write("ąęćżźń󳥌ŻŹĆŃŁÓĘ");


Answer 3:

我认为这个问题是基于Excel的Microsoft Excel中以.csv文件轧液变音符号 。 为了证明这一点,复制您的样本输出字符串ąęćżźń󳥌ŻŹĆŃŁÓĘ并粘贴到使用您喜欢的编辑一个测试文件,并保存为UTF-8编码的.csv文件。 在Excel中打开,看到了同样的问题。



Answer 4:

从答案阿伦Moore翻译为VB:

Context.Response.Write(""c)


文章来源: How to add encoding information to the response stream in ASP.NET?