读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文件
慕无忌1623718
TA贡献1744条经验 获得超4个赞
最简单的修复可能只是\uFEFF
从字符串中删除结果,因为它几乎不可能出于任何其他原因。
tmp = tmp.replace("\uFEFF", "");
另请参阅此番石榴错误报告
呼如林
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();}
- 3 回答
- 0 关注
- 520 浏览
相关问题推荐
添加回答
举报
0/150
提交
取消