我有以下代码:
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文件时,我得到以下行为:
我想在字符串前写下那些特殊的编码信息字符,即
context.Response.Write((char)0xef);
context.Response.Write((char)0xbb);
context.Response.Write((char)0xbf);
但这不会有任何好处。响应流将其视为普通数据并将其转换为不同的数据。
我很感激这方面的帮助。
答案 0 :(得分:23)
您所谓的“编码信息”实际上是一个BOM。我怀疑每个“角色”都是分开编码的。要手动编写BOM,您必须将其写为三个字节,而不是三个字符。我不熟悉.NET I / O类,但是应该有一个方法可以使用byte或byte []参数并将它们直接写入文件。
顺便说一句,UTF-8 BOM是可选的;实际上,Unicode Consortium不鼓励使用它。如果您没有特定的使用理由,请节省一些麻烦并将其遗漏。
编辑:我记得你还可以写出实际的BOM 字符,'\uFEFF'
,并让编码器处理它:
context.Response.Write('\uFEFF');
答案 1 :(得分:17)
我遇到了同样的问题,这是我的解决方案:
context.Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
context.Response.Write("ąęćżźń󳥌ŻŹĆŃŁÓĘ");
答案 2 :(得分:2)
我认为问题出在基于Microsoft Excel mangles Diacritics in .csv files的Excel上。要证明这一点,请复制ąęćżźń󳥌ŻŹĆŃŁÓĘ
的示例输出字符串并使用您喜欢的编辑器粘贴到测试文件中,并另存为UTF-8编码的.csv文件。在Excel中打开并查看相同的问题。
答案 3 :(得分:1)
来自Alan Moore的答案 翻译成VB:
Context.Response.Write(""c)