Java utf16去掉bom头
时间: 2023-07-25 09:03:51 浏览: 202
在 Java 中,我们可以使用 `java.nio.charset.CharsetDecoder` 类来处理 UTF-16 编码的 BOM 头。
下面是一个例子:
```java
import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CodingErrorAction;
public class RemoveBOM {
public static void main(String[] args) throws IOException {
// 打开 UTF-16 编码的文件
FileInputStream fis = new FileInputStream("file.txt");
InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-16"));
// 创建 CharsetDecoder 对象
CharsetDecoder decoder = Charset.forName("UTF-16").newDecoder();
decoder.onMalformedInput(CodingErrorAction.IGNORE);
decoder.onUnmappableCharacter(CodingErrorAction.IGNORE);
// 读取文件内容
CharBuffer cb = CharBuffer.allocate(fis.available());
isr.read(cb);
cb.flip();
// 去除 BOM 头
if (cb.length() > 0 && cb.charAt(0) == '\ufeff') {
cb.deleteCharAt(0);
}
// 处理文件内容
// ...
// 保存文件内容
FileOutputStream fos = new FileOutputStream("file.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, Charset.forName("UTF-16"));
osw.write(cb.toString());
osw.close();
}
}
```
在这个例子中,我们首先使用 `java.io.FileInputStream` 和 `java.io.InputStreamReader` 打开了一个 UTF-16 编码的文件,并通过 `java.nio.charset.Charset.forName` 方法创建了一个 `java.nio.charset.CharsetDecoder` 对象。
然后,我们使用 `java.nio.charset.CharsetDecoder` 对象读取了文件内容,并检查了它是否以 BOM 头开头。如果是,我们使用 `java.lang.CharSequence.deleteCharAt` 方法从内容中去除了 BOM 头。
在处理完文件内容后,我们再次使用 `java.io.FileOutputStream` 和 `java.io.OutputStreamWriter` 将内容写入文件中。这次,由于我们已经去除了 BOM 头,所以写入的文件是没有 BOM 头的。
阅读全文