编程开发中,免不了要读取磁盘中的文本文件,目前文本文件最常用的是使用“utf-8”及“gbk”字符编码,如果使用了错误的字符编码格式,就会发生乱码的问题,因而在读取前,需要约定好要读取的文本文件内容与工程代码字符编码的统一。如果程序能够自动在读取文件时,能够识别其字符编码,固然就happy了。
这是我目前写的小工具,目前测试能够很好的识别读取的文本文件是“utf-8”还是“gbk”,原理是这2种字符编码的英文字母及标点字符都是ASCII码,“utf-8”分有bom头与无bom头的情况,“utf-8”的中文字符的16进制编码基本是以“E”开头,那么,就根据这些特征进行猜测,代码如下:
package top.hmtools.base;
import java.math.BigInteger;
import top.hmtools.system.SystemInfoTools;
/**
* 猜测字符编码工具
* @author HyboJ
*
*/
public class CharsetGuessTools {
/**
* 根据字节码数组,猜测编码类型
* <br>依据:如果文本头有bom信息则可知其对应的字符编码。
* <br>此外,GBK与UTF-8都有可能,二者都可以没有bom信息。经观察发现,ASCII对应的字符是二者一致的部分,
* <br>经尝试多个中文字符,发现在UTF-8中的编码在以16进制字符串表示时,基本上是以“E”开头,而GBK则不是。
* <br>准确性还有待验证,如果猜测不准确,请联系作者:<a href=&