最近在做一个数据共享的项目,在读取UTF-8编码的文件时出现些问题,现记录如下。
UTF-8编码的文件在读取时要格外注意,看其文件开头是否包含[BOM]位。 这个字符一般用来判断该文件是否为UTF-8编码,但Java读取时也会将该判断位一同读出,导致读取的数据与预期不一致。
解决方法如下
import java.io.*;
public class Test1 {
/** 定义BufferReader */
public static BufferedReader openTextFileR(
String fileName
,String charSet
)throws Exception{
return new BufferedReader(
new InputStreamReader(
skipUTF8BOM(
new FileInputStream(
new File(fileName))
,charSet)
,charSet));
}
/** 跳过[BOM]位 */
public static InputStream skipUTF8BOM(
InputStream is
,String charSet
)throws Exception{
if( !charSet.toUpperCase().equals("UTF-8") ) return is;
if( !is.markSupported() ){
// 如果输入流不支持mark功能时,用BufferedInputStream替换