Bytes | Encoding Form |
---|---|
00 00 FE FF | UTF-32, big-endian |
FF FE 00 00 | UTF-32, little-endian |
FE FF | UTF-16, big-endian |
FF FE | UTF-16, little-endian |
EF BB BF | UTF-8 |
但是这些BOM并不是必须的,JAVA的Unicode编码可以处理UTF-16的两种BOM,但是对于UTF-8却无能为力,JDK Bug 4508058很早之前就提到了,可是sun却不愿意修复也不愿意提供一种新的Charset来帮助我们处理UTF-8的BOM。但是例如windows的notepad等程序在保存为UTF-8时都会带上BOM,那么用JAVA的java.io.InputStreamReader来读取就会在最前面出现一个“?”。
既然sun以兼容性的问题不愿意修复,那么只有自己来完成它们了,当然也已经有人帮我们做了这样的事情:
UnicodeInputStream.java
UnicodeReader.java
可以用来弥补,它们可以处理BOM并自动识别流,并且把讨厌的“?”去掉。
No comments:
Post a Comment