c# – 如何在写入TextWriter时输出字节顺序标记?

c# – 如何在写入TextWriter时输出字节顺序标记?,第1张

概述我正在写文本到TextWriter.我希望UTF-16字节顺序标记(BOM)出现在输出中: public void ProcessRequest(HttpContext context){ context.Response.ContentEncoding = new UnicodeEncoding(true, true); WriteStuffToTextWriter(context 我正在写文本到TextWriter.我希望UTF-16字节顺序标记(BOM)出现在输出中:
public voID ProcessRequest(httpContext context){   context.Response.ContentEnCoding = new UnicodeEnCoding(true,true);   WriteStuffToTextWriter(context.Response.Output);}

除了输出不包含字节顺序标记:

http/1.1 200 OKServer: ASP.NET Development Server/10.0.0.0Date: Thu,06 Sep 2012 21:09:23 GMTX-AspNet-Version: 4.0.30319Content-disposition: attachment; filename="Transactions_Calendar_20120906.csv"Cache-Control: privateContent-Type: text/csv; filename="Transactions_Calendar_20120906.csv"; charset=utf-16BEContent-Length: 95022Connection: CloseJobname,Shiftname,6////09////2012 12::::00::::00 АΜ,...

我如何告诉TextWriter编写编码标记?

注意:2nd paramter in UnicodeEncoding

context.Response.ContentEnCoding = new UnicodeEnCoding(true,true);

byteOrderMark
Type: 07001
true to specify that a Unicode byte order mark is provIDed; otherwise,false.

解决方法 在某些时候,我意识到解决方案是多么简单.

我以前认为Unicode Byte-Order-Mark是一些特殊的签名.我曾经认为我必须仔细决定我想输出哪个字节序列,以便输出正确的BOM:

> 0xFE 0xFF
> 0xFF 0xFE
> 0xEF 0xBB 0xBF

但从那时起,我意识到字节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转换为已配置使用的任何字节编码.

Note: Any code is released into the public domain. No attribution required.

总结

以上是内存溢出为你收集整理的c# – 如何在写入TextWriter时输出字节顺序标记?全部内容,希望文章能够帮你解决c# – 如何在写入TextWriter时输出字节顺序标记?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1248575.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存