读UTF-8 - BOM标记

读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>


收到一只叮咚
浏览 521回答 3
3回答

紫衣仙女

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

慕无忌1623718

最简单的修复可能只是\uFEFF从字符串中删除结果,因为它几乎不可能出于任何其他原因。tmp&nbsp;=&nbsp;tmp.replace("\uFEFF",&nbsp;"");另请参阅此番石榴错误报告

呼如林

使用Apache Commons库。类:&nbsp;org.apache.commons.io.input.BOMInputStream用法示例:String&nbsp;defaultEncoding&nbsp;=&nbsp;"UTF-8";InputStream&nbsp;inputStream&nbsp;=&nbsp;new&nbsp;FileInputStream(someFileWithPossibleUtf8Bom);try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;BOMInputStream&nbsp;bOMInputStream&nbsp;=&nbsp;new&nbsp;BOMInputStream(inputStream); &nbsp;&nbsp;&nbsp;&nbsp;ByteOrderMark&nbsp;bom&nbsp;=&nbsp;bOMInputStream.getBOM(); &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;charsetName&nbsp;=&nbsp;bom&nbsp;==&nbsp;null&nbsp;?&nbsp;defaultEncoding&nbsp;:&nbsp;bom.getCharsetName(); &nbsp;&nbsp;&nbsp;&nbsp;InputStreamReader&nbsp;reader&nbsp;=&nbsp;new&nbsp;InputStreamReader(new&nbsp;BufferedInputStream(bOMInputStream),&nbsp;charsetName); &nbsp;&nbsp;&nbsp;&nbsp;//use&nbsp;reader}&nbsp;finally&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;inputStream.close();}
打开App,查看更多内容
随时随地看视频慕课网APP