【问题标题】:How to add encoding information to the response stream in ASP.NET?如何在 ASP.NET 的响应流中添加编码信息?
【发布时间】:2009-06-17 07:13:59
【问题描述】:

我有以下代码:

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);

但这不会有任何好处。响应流将其视为普通数据并将其转换为不同的数据。

我会很感激这方面的帮助。

【问题讨论】:

    标签: asp.net encoding response response.write


    【解决方案1】:

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

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

    【讨论】:

    • 我想知道,这与 Alan Moores 的回答中发生的情况大致相同吗?
    • 这是最有用的答案,因为每个编码和字节顺序系统都有不同的前导码,这适用于其他编码。
    • 这让我发疯了。我用 Unicode 发送希伯来语文本,你可以在 Notepad 和 Notepad++ 中看到它,但 Excel/Word/Wordpad 都显示乱码。但你的回答解决了它。
    【解决方案2】:

    您所说的“编码信息”实际上是 BOM。我怀疑这些“字符”中的每一个都是单独编码的。要手动编写 BOM,您必须将其编写为三个 字节,而不是三个字符。我不熟悉 .NET I/O 类,但应该有一种方法可供您使用,它采用 byte 或 byte[] 参数并将它们直接写入文件。

    顺便说一下,UTF-8 BOM 是可选的;事实上,Unicode 联盟不鼓励使用它。如果您没有使用它的具体原因,请省去一些麻烦并将其排除在外。

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

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

    【讨论】:

    • 非常感谢!这正是我一直在寻找的。 aphx 句柄的目的纯粹是为了生成 Excel 友好列表,这可以解决问题!
    【解决方案3】:

    我认为问题在于基于Microsoft Excel mangles Diacritics in .csv files 的 Excel。为了证明这一点,请复制您的示例输出字符串 ąęćżźńółĄŚŻŹĆŃŁÓĘ 并使用您喜欢的编辑器粘贴到测试文件中,然后另存为 UTF-8 编码的 .csv 文件。在 Excel 中打开并查看相同的问题。

    【讨论】:

      【解决方案4】:

      Alan Moore的回答 翻译成VB:

      Context.Response.Write(""c)
      

      【讨论】:

      猜你喜欢
      • 2023-02-03
      • 2019-07-01
      • 2012-04-13
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多