Java:UTF-8和BOM

Java:UTF-8和BOM,java,utf-8,byte-order-mark,Java,Utf 8,Byte Order Mark,在Java Bug数据库的一页上,它显示Sun/Oracle不会解决Java不解析UTF-8编码字符串的BOM的问题。因为这个页面上的最新评论可以追溯到2010年,我想知道是否有关于这个的更年轻的信息?Java仍然不能处理UTF-8的BOM吗?是的,Java仍然不能处理UTF8编码文件中的BOM。我在解析几个XML文件以进行数据格式化时遇到了这个问题。由于您不知道什么时候可能会遇到这些问题,如果您在运行时发现了BOM标记,或者遵循tchrist给出的建议,我建议将其去掉。我不同意您如何陈述这个问

在Java Bug数据库的一页上,它显示Sun/Oracle不会解决Java不解析UTF-8编码字符串的BOM的问题。因为这个页面上的最新评论可以追溯到2010年,我想知道是否有关于这个的更年轻的信息?Java仍然不能处理UTF-8的BOM吗?

是的,Java仍然不能处理UTF8编码文件中的BOM。我在解析几个XML文件以进行数据格式化时遇到了这个问题。由于您不知道什么时候可能会遇到这些问题,如果您在运行时发现了BOM标记,或者遵循tchrist给出的建议,我建议将其去掉。

我不同意您如何陈述这个问题,但是,是的:UTF-8的Java编码器和解码器当然不考虑多余的BOM。UTF-8上的BOM真的是坏消息,会破坏各种各样的事情。请不要使用它们;如果您发现自己需要指定文件编码,那么请使用更高级别的协议,例如MIME头、嵌入声明或注释(使用任何编程语言),或者通过惯用的文件扩展名“.utf8”。我同意您的看法。但是,如果您想创建一个用户可以直接在Excel中打开的UTF-8 csv文件,则无法绕过BOM表。如果不使用BOM表,它会将其作为ANSI文件读取。(微软应该被起诉,因为他们的BOM花费了全世界的所有开发时间)如果你不知道如何做到这一点:一个快速的方法是
If(text.codepoint(0)==0xfeff)text=text.substring(1,text.length())(这也将捕获UTF-8 BOM
EF BB BF
)。下面介绍了更详细的方法: