今天在做用Java輸出CSV文件,用MS Office2007打開時,總是亂碼,文件是用UTF-8輸出的,用其它編輯器打沒有亂碼問題,只有MS office會有問題,經過一天的研究,找到了如下解決方法,在輸出信息頭上加BOM即可。以下是轉載的文章,做為備忘錄。

什么是BOM

BOM(byte-order mark),即字节顺序标记,它是插入到以UTF-8、UTF16或UTF-32编码Unicode文件开头的特殊标记,用来识别Unicode文件的编码类型。对于UTF-8来说,BOM并不是必须的,因为BOM用来标记多字节编码文件的编码类型和字节顺序(big-endian或little- endian)。

BOMs 文件头:

00 00 FE FF    = UTF-32, big-endian

FF FE 00 00    = UTF-32, little-endian

EF BB BF       = UTF-8,

FE FF          = UTF-16, big-endian

FF FE          = UTF-16, little-endian

‍下面举个例子,针对UTF-8的文件BOM做个处理:

String xmla = StringFileToolkit.file2String(new File(“D:\\projects\\mailpost\\src\\a.xml”),“UTF-8”);

byte[] b = xmla.getBytes(“UTF-8”);

String xml = new String(b,3,b.length-3,“UTF-8”);

------------------------

byte[] bom ={(byte) 0xEF,(byte) 0xBB,(byte) 0xBF};

response.getOutputStream().write(bom);

..............

思路是:先按照UTF-8编码读取文件后,跳过前三个字符,重新构建一个新的字符串,然后用Dom4j解析处理,这样就不会报错了。其他编码的方式处理思路类似,其实可以写一个通用的自动识别的BOM的工具,去掉BOM信息,返回字符串。

不过这个处理过程已经有牛人解决过了:http://koti.mbnet.fi/akini/java/unicodereader/

java write 去bom_Java处理UTF-8带BOM的文本的读写相关推荐

  1. java bom json,JSON字符串带BOM头ufeff

    调用三方接口返回值JSON字符串带BOM头"\ufeff",JSON解析死活报错. 我是用SpringBoot的RestTemplate调用三方接口的,一开始返回值我是用对象接收返 ...

  2. Java PermGen 去哪里了?

    Java PermGen 去哪里了? 原文链接:原文作者:Monica Beckwith  以下为本人翻译,仅用于交流学习,版权归原作者和InfoQ所有,转载注明出处,请不要用于商业用途 在Java虚 ...

  3. 编写Java程序,在屏幕上显示带标题的窗口,并添加一个按钮。当用户单击按钮时,结束程序。

    编写Java程序,在屏幕上显示带标题的窗口,并添加一个按钮.当用户单击按钮时,结束程序. package p3;import java.awt.event.ActionEvent; import ja ...

  4. java 模板 word转pdf 可分页 带图片

    java 模板 word转pdf 可分页 带图片 之前写过一个简单的案例,但是在项目中完全不能满足客户的需求,所以重新用啦一种方式来写,采用了word转换pdf的方式,这种经过不断研究,满足了可分页, ...

  5. java中去字符串中的(全角)空格

    在Java中去字符串首尾空格或去除所有空格的(包括全角)方法如下: /** * 去除字符串中所包含的空格(包括:空格(全角,半角).制表符.换页符等) * @param s * @return */ ...

  6. 有信仰自然好,关键是信仰带我们去何方。如果信仰带我们去沟里,那我 们还是暂且留在岸上看天色吧。----韩寒

    有信仰自然好,关键是信仰带我们去何方.如果信仰带我们去沟里,那我 们还是暂且留在岸上看天色吧.----韩寒

  7. JAVA内存分析:使用JDK自带工具进行内存和CPU分析及垃圾回收

    JAVA内存分析:使用JDK自带工具进行内存和CPU分析及垃圾回收 JAVA内存分析一:基于dump内存溢出快照分析 JAVA内存分析二:idea集成jprofiler查看JVM内存使用情况 JAVA ...

  8. Java 编写推箱子报告,推箱子游戏用java怎么去写

    推箱子游戏用java怎么去写 发布时间:2020-06-22 16:31:07 来源:亿速云 阅读:100 作者:清晨 这篇文章将为大家详细讲解有关推箱子游戏用java怎么写,小编觉得挺实用的,因此分 ...

  9. java期末课程设计----模拟银行业务(带界面)

    java期末课程设计----模拟银行业务(带界面) 本项目包含存款,取款,查询,转账,修改密码等功能的银行管理系统的功能(不涉及数据库).大致流程图如下: 一.设计思路 本系统采用JAVA语言并在ec ...

最新文章

  1. 求方程ax^2+bx+c=0的根。
  2. Vivado IP核的综合模式:Global以及Out of context的区别理解
  3. 使用Docker-容器命令案例1
  4. 浅谈项目管理中的四要素
  5. JAVA进阶day06内部类和匿名类
  6. Taro+react开发(65):h5全局重置背景样式
  7. 机器学习中的特征建模(特征工程)和算法选型建模 - 以暴力破解识别为例
  8. Rsync 服务安全加固
  9. 异常:org.springframework.http.converter.HttpMessageNotReadableException
  10. 怎样访问远程服务器文件夹,远程访问服务器文件夹
  11. 【转载】C++引用详解
  12. 《合作的进化》pdfmobiepub电子版
  13. 脉冲神经网络-基于IAF神经元的手写数字识别
  14. 用Excel做了7天报表,这个领导喜欢的可视化工具,只用了7小时
  15. Flutter中设ListView的shrinkWrap为ture导致的崩溃
  16. 哪种方式的电子签名更可靠?
  17. 一亩三分地,答题题库,1point3acres (Time series,每周末答题一次/更新一次)
  18. linux与windows内核哪个难学,国产操作系统为何都基于Linux内核?又和Windows像?
  19. LZO和MiniLZO编码介绍
  20. 剑指offer: 二叉树中和为某一值的路径

热门文章

  1. java web批量下载_JAVAWEB批量文件下载器
  2. java实现并发连接池_java并发实战:连接池实现
  3. 南京信息工程大学百科园c语言答案,南京信息工程大学822C/C++程序设计考研真题及笔记...
  4. Java学习笔记2.3.3 运算符与表达式 - 关系运算符
  5. 《天天数学》连载50:二月十九日
  6. MyBatis使用MySQL存储过程
  7. 【codevs1116】四色问题,深搜入门题目
  8. C ++基础 | 从 理解C++程序结构 到 编写程序_1
  9. python中代码块使用缩进来表示对吗_Python 为什么使用缩进来划分代码块?
  10. 【英语学习】【WOTD】largesse 释义/词源/示例