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

读UTF-8 - BOM标记

读UTF-8 - BOM标记

呼如林 2019-07-24 19:35:48
读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贡献1772条经验 获得超8个赞

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

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


查看完整回答
反对 回复 2019-07-24
?
万千封印

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

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

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

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


查看完整回答
反对 回复 2019-07-24
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

使用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-07-24
  • 3 回答
  • 0 关注
  • 510 浏览

添加回答

举报

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