Java处理不同的字符编码流
在实际开发中,可能会处理⼀些⽂本信息,我们可能使⽤
BufferedReader bfr = new BufferedReader(new InputStreamReader(bis,encoding));
这样的⽅式来处理输⼊流,然后就可以⼀⾏⼀⾏的处理信息了。
但是,这⾥的encoding⼀般都不会确定,有的是GBK格式,有的是UTF-8格式,可能还有其他格式的⽂件。
这时候,处理的⽅式很多,现在给⼤家介绍⼀种亲测有效的⽅法。
原理:使⽤⽂本⽂件头部信息,来确定使⽤哪种字符编码。
⽐如,UTF-8含BOM格式的⽂件前三个字节会是这样:EFBBBF
Unicode⽂件前两个字节会是这样:FFFE
GBK这类统⼀为ANSI⽂件,这种⼀般没有头信息,如果两个⽂件都是ANSI,⼀个是⽇语编码,⼀个是GBK,那这种办法就没有办法区分了。
代码:
输⼊:InputStream
BufferedReader bfr = null;
/*
* 默认读取⽅式为GBK编码,先读取前三个字节,看是否为⼗六进制的“EFBBBF”
* 如果是,则使⽤UTF-8⽅式读取
* 否则则使⽤默认GBK⽅式读取
*/
BufferedInputStream bis = new BufferedInputStream(is);
String encoding = "gbk";
bis.mark(3);
byte[] bom = new byte[3];java valueof
if(bom[0] == Integer.valueOf("EF",16).byteValue()
&&bom[1] == Integer.valueOf("BB",16).byteValue()
&&bom[2] == Integer.valueOf("BF",16).byteValue()){
encoding = "utf-8";
} else if(bom[0] == Integer.valueOf("FF",16).byteValue()
&&bom[1] == Integer.valueOf("FE",16).byteValue()) {
encoding = "Unicode";
}
System.out.println(encoding);
//正式读取⽂件开始
bfr = new BufferedReader(new InputStreamReader(bis,encoding));
//do somethig
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论