zoukankan      html  css  js  c++  java
  • ASP.NET中将导出的数据以UTF-8编码方式进行存储

     
    Response.Charset = "UTF-8";
                Response.ContentEncoding = Encoding.UTF8;
                Response.AppendHeader($"Content-Disposition", "attachment;filename=coupons.xls");
                //Response.AppendHeader("Content-Disposition", "attachment;filename="" + HttpUtility.UrlEncode("coupons.xls", System.Text.Encoding.UTF8) + """);
                Response.ContentType = "application/ms-excel";
     
    ...
     
     
    ////以下代码使文件内容以UTF-8编码存储,如果注掉则以UTF-8无BOM格式编码
                byte[] buffer = Encoding.UTF8.GetBytes(result.ToString());
                byte[] outBuffer = new byte[buffer.Length + 3];
                outBuffer[0] = (byte)0xEF;
                outBuffer[1] = (byte)0xBB;
                outBuffer[2] = (byte)0xBF;
                Array.Copy(buffer, 0, outBuffer, 3, buffer.Length);
                Response.Write(Encoding.UTF8.GetString(outBuffer));
     
                //Response.Write(result);
     
     
                Response.Flush();
                Response.End();

    BOM是UTF编码方案里用于标识编码的标准标记,在UTF-16里是FF FE,UTF-8里是EF BB BF。这个标记是可选的,因为UTF-8没有顺序,所以它可以被用来检测一个字节流是否是UTF-8编码的。微软做这种检测,但有些软件不做这种检测,而把它当做正常字符处理。
    微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节, windows上面的notepad等程序就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的, 然而这个只是微软暗自作的标记, 其它平台上并没有对UTF-8文本文件做个这样的标记,类Unix系统中就没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。也就是说一个UTF-8文件可能有BOM,也可能没有BOM,那么怎么区分呢?
    三种方法:
    1、用UltraEdit-32打开文件,切换到十六进制编辑模式,查看文件头部是否有EF BB BF;
    2、用Dreamweaver打开,查看页面属性,看“包括Unicode签名BOM”前面是否有个勾;
    3、用Windows的记事本打开,选择 “另存为”,看文件的默认编码是UTF-8还是ANSI,如果是ANSI则不带BOM。
    所谓的unicode保存的文件实际上是utf-16,只不过恰好跟unicode的码相同而已,但在概念上unicode与 utf是两回事,unicode是内存编码表示方案,而utf是如何保存和传输unicode的方案。utf-16还分高位在前 (LE)和高位在后(BE)两种。官方的utf编码还有utf-32,也分LE和BE。非unicode官方的utf编码还有utf-7,主要用于邮件传输。utf-8的单字节部分是和iso-8859-1兼容的,这主要是为了解决一些旧的系统和库函数不能正确处理utf-16的问题,而且对英语字符来说,也节省保存的文件空间(以非英语字符浪费空间为代价)。在iso-8859-1的时候,utf8和iso-8859-1都是用一个字节表示的,当表示其它字符的时候,utf-8会使用两个或三个字节。

    参考:http://www.cnblogs.com/landywzx/archive/2012/12/28/2836901.html

  • 相关阅读:
    spring boot使用自定义注解+AOP实现对Controller层指定方法的日志记录
    spring事务管理中,注解方式和xml配置方式优先级谁高?
    synchronized修饰类中不同方法,调用的时候方法互斥吗
    java(spring boot)实现二维码生成(可以插入中间log和底部文字)
    java借助Robot给微信好友自动发消息(可发送表情包)
    js中Map类型的使用
    【转】Intellij笔记
    Tomcat6.0webappsevopWEB-INFclasses (系统找不到指定的路径)
    多线程多进程之其他
    文件操作
  • 原文地址:https://www.cnblogs.com/atwind/p/5234703.html
Copyright © 2011-2022 走看看