Java:UTF-8和BOM

7
在Java的Bug数据库页面http://bugs.sun.com/view_bug.do?bug_id=4508058上,它指出Sun/Oracle不会修复Java无法解析UTF-8编码字符串的BOM问题。由于此页面上最近的评论可以追溯到2010年,我想知道是否有关于这个问题的新信息?Java是否仍然不能处理UTF-8的BOM?

1
我不同意你所陈述问题的方式,但是是的:当然,Java的UTF-8编码器和解码器不允许存在多余的BOM。UTF-8上的BOM非常糟糕,会破坏所有类型的东西。请永远不要使用它们;如果你发现自己需要指定文件编码,则使用更高级别的协议,例如MIME头、嵌入式声明或评论(无论是什么编程语言),或通过惯用的文件扩展名“.utf8”。 - tchrist
3
我同意你的观点。然而,如果你想创建一个用户可以直接在Excel中打开的UTF-8 csv文件,那么就必须使用BOM。如果不使用BOM,则它会将其读取为ANSI文件。(微软应该为他们的BOM消耗了全球的开发时间而被起诉) - dstibbe
1个回答

6
是的,Java仍然无法处理UTF8编码文件中的BOM。我在解析多个XML文件进行数据格式化时遇到了这个问题。由于你无法知道何时会遇到它们,我建议在运行时去除BOM标记,或者按照tchrist所提供的建议来处理。

如果你不知道如何做,一个快速的方法是 if (text.codePointAt(0) == 0xfeff) text = text.substring(1, text.length()); (这也会捕获UTF-8的BOM EF BB BF)。更复杂的方法在这里描述:https://dev59.com/e3I-5IYBdhLWcg3weoPR#1835529 - user149408

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接