`
yvonxiao
  • 浏览: 77836 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

在UTF-8编码的Web 程序中导出CSV文件乱码问题

阅读更多

  在做一个导出CSV文件的功能时发现导出的文件是乱码,上网查了下,发现原来是BOM(Byte Order Mark)的问题


  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会使用两个或三个字节。


  明白了原因之后,我在Struts2的Action里用流生成CSV文件的时候,在一开始就加上这样一句

 

out = response.getOutputStream();
//加上UTF-8文件的标识字符
out.write(new byte[]{(byte)0xEF,(byte)0xBB,(byte)0xBF});

 

  再用微软的Excel打开,没有乱码了。

分享到:
评论
1 楼 longware 2011-09-11  

相关推荐

    Java避免UTF-8的csv文件打开中文出现乱码的方法

    如果需要兼容多个Excel版本,可以使用UTF-8编码格式,并在文件头部输出BOM,即0xEF 0xBB 0xBF这三个字节。 Java避免UTF-8的csv文件打开中文出现乱码的方法是使用UTF-16LE编码格式,并在文件头部输出BOM。同时,需要...

    tableExport + base64 excel、png导出无中文乱码

    这是因为中文字符在不同的编码格式(如GBK、UTF-8)中表示的方式不同。在导出过程中,如果没有正确设置字符编码,就可能导致接收方无法正确解码,从而出现乱码。为解决这个问题,我们需要确保从HTML到导出文件的整个...

    Eclipse 开发JSP中文乱码解决方案

    - 如果你的项目中包含.properties文件,记得在这些文件中也设置UTF-8编码,因为它们默认可能是ISO-8859-1编码。 - 验证你的服务器配置,如Tomcat,确保其配置文件(如server.xml或web.xml)中指定的编码与项目设置相...

    解决数据库存取乱码问题

    在Tomcat等Web服务器中,`web.xml`配置文件可以通过`<filter>`和`<filter-mapping>`元素设置过滤器,如`CharacterEncodingFilter`,强制请求和响应使用UTF-8编码。 5. **页面编码**:HTML或JSP页面也需要明确指定...

    D:\工作目录\2019普声微信打卡考勤系统\资料\导出excel、pdf插件\tableExport导出excel、pdf解决中文乱码问题.rar

    在Web环境中,UTF-8编码是广泛使用的标准,因为它支持多种语言,包括中文。tableExport默认可能使用其他编码格式,导致在导出包含中文的表格时出现乱码。 解决中文乱码问题的关键步骤如下: 1. **配置tableExport...

    史上最全的PHP+MySql中文乱码解决方案.rar

    - “保存时乱码”:检查文件编辑器的编码设置,通常应设置为UTF-8无BOM。 - “查询结果乱码”:检查MySQL查询语句的字符集设置,以及PHP处理查询结果的方式。 - “提交数据乱码”:确保表单提交的数据编码与...

    mysql的乱码解决方法

    - **数据导入导出过程中编码问题**:在导入CSV或其他格式的数据时,若源文件编码与MySQL服务器的字符集不一致,也会导致乱码。 - **网页或应用程序编码设置**:如果你的数据用于Web应用,网页编码与数据库编码不...

    利用 进行IE数据导出

    - `request.setCharacterEncoding("UTF-8")`确保了所有来自请求的数据都以UTF-8编码读取。 - 使用`System.currentTimeMillis()`获取当前时间戳,并除以1000转换为秒,作为文件名的一部分,以防止文件覆盖。 - `...

    table-export(excel、word等中文无乱码)多版本合集

    - **统一编码**:在读取HTML表格数据时,确保使用正确的字符编码(如UTF-8)。 - **导出时编码转换**:在生成Excel、Word等文件时,将数据转换为目标文件格式所需的编码,如GBK或Unicode。 3. **应用场景:** - ...

    ASP.NET中把Gridview导出为EXCEL

    在写入数据之前,确保使用UTF-8编码,因为这是Excel能正确识别中文的常见编码。可以使用StreamWriter的构造函数,传入编码类型为Encoding.UTF8。 5. **设置响应头**:在HTTP响应中设置Content-Type为application/...

    mysql解决中文问题文档

    例如,如果CSV文件是UTF-8编码,确保在导入时使用`LOAD DATA INFILE`命令指定`CHARACTER SET utf8`。 7. **Web应用配置**:如果你是在Web环境下使用MySQL,如PHP、Java等,还需要在应用程序代码中设置合适的字符集...

    Yii框架扩展CGridView增加导出CSV功能的方法

    Yii框架是一个基于组件的高性能PHP框架,用于开发Web2.0应用。在Yii中,CGridView是一个非常实用的组件,用于展示数据集,通常用于数据的分页、排序和筛选...同时,确保在你的环境中正确处理字符编码,以避免乱码问题。

    silverlight导出数据到EXCEL

    4. **处理中文乱码**:在生成文件时,确保编码设置为UTF-8,以避免中文字符显示为乱码。在Silverlight中,可以使用StreamWriter类,并指定Encoding.UTF8参数来创建文件。 5. **处理科学计数法**:在数值较大或较小时...

    displaytag详细用法(中文问题已解决)

    4. **解决方案**:解决DisplayTag中文乱码问题,通常需要修改`displaytag.properties`文件,将`pageEncoding`和`contentType`属性设置为`UTF-8`,并确保服务器和数据库连接也支持UTF-8编码。 5. **自定义....

    Dreamweaver怎么避免中文乱码的问题?

    在创建文档后,立即检查并确认编码设置是否为“简体中文GB2312”或更通用的“UTF-8”,因为UTF-8支持全球多种语言,包括中文。 2. **使用“页面属性”进行设置**: - 如描述中提到的,可以通过点击“设计”模式下...

    tableExport插件使用的方法

    对于中文支持,`tableExport`插件默认支持UTF-8编码,因此,只要你的HTML文件头部声明了正确的字符集,例如`<meta charset="UTF-8">`,导出的文件应该能正确显示中文。如果遇到中文乱码问题,可能需要检查服务器的...

    python django下载大的csv文件实现方法分析

    值得注意的是,这个示例使用了UTF-16LE编码,因为某些Excel版本在打开UTF-8编码的CSV文件时可能出现乱码问题。如果需要其他编码,可以根据需求进行调整。 总结来说,Python Django框架通过结合`...

    Go语言导出内容到Excel的方法

    接着,向文件中写入了UTF-8 BOM标记"\xEF\xBB\xBF",这是为了确保文件的正确编码,避免打开文件时出现乱码问题。 之后,创建了一个csv.NewWriter对象,并调用其Write方法向文件中写入数据。Write方法接受一个字符串...

    ASP.NET导出功能

    ASP.NET导出功能是指在ASP.NET Web应用程序中实现的一种能够将数据(如数据库查询结果)转换为特定格式(例如Excel、CSV等)并提供给用户下载的功能。这种功能不仅提高了用户体验,还方便了数据管理和分享。 #### ...

    php导入excel

    如果遇到中文乱码问题,可以尝试将字符串从UTF-8编码转换为GB2312。 PHPExcel是广泛使用的PHP库,用于读取、写入和创建Excel文件,它支持多种文件格式,包括Excel 2003的.XLS和Excel 2007及更高版本的.XLSX。以下是...

Global site tag (gtag.js) - Google Analytics