为了账号安全,请及时绑定邮箱和手机立即绑定

读UTF-8 - BOM标记

读UTF-8 - BOM标记

收到一只叮咚 2019-09-06 11:06:10
读UTF-8 - BOM标记我正在通过FileReader读取文件 - 文件是UTF-8解码(带BOM)现在我的问题是:我读取文件并输出一个字符串,但遗憾的是BOM标记也输出了。为什么会这样?fr = new FileReader(file);br = new BufferedReader(fr);     String tmp = null;     while ((tmp = br.readLine()) != null) {     String text;         text = new String(tmp.getBytes(), "UTF-8");     content += text + System.getProperty("line.separator");}第一行后的输出?<style>
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

在Java中,您必须手动使用UTF8 BOM(如果存在)。Java bug数据库中记录了此行为,此处和此处。暂时没有解决方法,因为它会破坏JavaDoc或XML解析器等现有工具。在Apache的IO共享提供了一个BOMInputStream处理这种情况。

看看这个解决方案:处理带有BOM的UTF8文件


查看完整回答
反对 回复 2019-09-10
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

最简单的修复可能只是\uFEFF从字符串中删除结果,因为它几乎不可能出于任何其他原因。

tmp = tmp.replace("\uFEFF", "");

另请参阅此番石榴错误报告


查看完整回答
反对 回复 2019-09-10
?
呼如林

TA贡献1798条经验 获得超3个赞

使用Apache Commons库。

类: org.apache.commons.io.input.BOMInputStream

用法示例:

String defaultEncoding = "UTF-8";InputStream inputStream = new FileInputStream(someFileWithPossibleUtf8Bom);try {
    BOMInputStream bOMInputStream = new BOMInputStream(inputStream);
    ByteOrderMark bom = bOMInputStream.getBOM();
    String charsetName = bom == null ? defaultEncoding : bom.getCharsetName();
    InputStreamReader reader = new InputStreamReader(new BufferedInputStream(bOMInputStream), charsetName);
    //use reader} finally {
    inputStream.close();}



查看完整回答
反对 回复 2019-09-10
  • 3 回答
  • 0 关注
  • 520 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信