c# – 如何在写入TextWriter时输出字节顺序标记?
我正在写文本到TextWriter.我希望UTF-16字节顺序标记(BOM)出现在输出中:
public void ProcessRequest(HttpContext context) { context.Response.ContentEncoding = new UnicodeEncoding(true,true); WriteStuffToTextWriter(context.Response.Output); } 除了输出不包含字节顺序标记: HTTP/1.1 200 OK Server: ASP.NET Development Server/10.0.0.0 Date: Thu,06 Sep 2012 21:09:23 GMT X-AspNet-Version: 4.0.30319 Content-Disposition: attachment; filename="Transactions_Calendar_20120906.csv" Cache-Control: private Content-Type: text/csv; filename="Transactions_Calendar_20120906.csv"; charset=utf-16BE Content-Length: 95022 Connection: Close JobName,ShiftName,6////09////2012 12::::00::::00 АΜ,... 我如何告诉TextWriter编写编码标记? 注意:2nd paramter in context.Response.ContentEncoding = new UnicodeEncoding(true,true);
解决方法
在某些时候,我意识到解决方案是多么简单.
我以前认为Unicode Byte-Order-Mark是一些特殊的签名.我曾经认为我必须仔细决定我想输出哪个字节序列,以便输出正确的BOM: > 0xFE 0xFF 但从那时起,我意识到字节Byte-Order-Mark不是一些特殊的字节序列,你必须先添加到你的文件中. BOM只是一个Unicode字符.你不输出任何字节;你只输出字符U FEFF.编写该字符的行为,序列化器将其转换为您正在使用的任何编码. 选择角色U feff(ZERO WIDTH NO-BREAK SPACE)是有充分理由的.它是一个空间,所以它没有任何意义,它是零宽度,所以你甚至不应该看到它. 这意味着我的问题从根本上是有缺陷的.没有“写一个字节顺序标记”这样的东西.你只需要确保你写出的第一个字符是U FEFF.在我的情况下,我写信给TextWriter: void WriteStuffToTextWriter(TextWriter writer) { String csvExport = GetExportAsCSV(); writer.Write("xfeff"); //Output unicode charcter U+FEFF as a byte order marker writer.Write(csvExport); } TextWriter将处理将unicode字符U feff转换为已配置使用的任何字节编码.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |