从tomcat源码抄来的改的:
private Object[] getEncodingName(byte[] b4, int count) throws Exception {
if (count < 2) {
throw new Exception("unknow");
}
// UTF-16, with BOM
int b0 = b4[0] & 0xFF;
int b1 = b4[1] & 0xFF;
if (b0 == 0xFE && b1 == 0xFF) {
// UTF-16, big-endian
return new Object[]{"UTF-16BE",new Integer(2)};
}
if (b0 == 0xFF && b1 == 0xFE) {
// UTF-16, little-endian
return new Object[] {"UTF-16LE",new Integer(2)};
}
// default to UTF-8 if we don't have enough bytes to make a
// good determination of the encoding
if (count < 3) {
throw new Exception("unknow");
}
// UTF-8 with a BOM
int b2 = b4[2] & 0xFF;
if (b0 == 0xEF && b1 == 0xBB && b2 == 0xBF) {
return new Object[]{"utf-8",new Integer(3)};
}
// default to UTF-8 if we don't have enough bytes to make a
// good determination of the encoding
if (count < 4) {
throw new Exception("unknow");
}
// other encodings
int b3 = b4[3] & 0xFF;
if (b0 == 0x00 && b1 == 0x00 && b2 == 0x00 && b3 == 0x3C) {
// UCS-4, big endian (1234)
return new Object[]{"ISO-10646-UCS-4",new Integer(4)};
}
if (b0 == 0x3C && b1 == 0x00 && b2 == 0x00 && b3 == 0x00) {
// UCS-4, little endian (4321)
return new Object[]{"ISO-10646-UCS-4",new Integer(4)};
}
if (b0 == 0x00 && b1 == 0x00 && b2 == 0x3C && b3 == 0x00) {
// UCS-4, unusual octet order (2143)
// REVISIT: What should this be?
return new Object[]{"ISO-10646-UCS-4",new Integer(4)};
}
if (b0 == 0x00 && b1 == 0x3C && b2 == 0x00 && b3 == 0x00) {
// UCS-4, unusual octect order (3412)
// REVISIT: What should this be?
return new Object[]{"ISO-10646-UCS-4",new Integer(4)};
}
if (b0 == 0x00 && b1 == 0x3C && b2 == 0x00 && b3 == 0x3F) {
// UTF-16, big-endian, no BOM
// (or could turn out to be UCS-2...
// REVISIT: What should this be?
return new Object[]{"UTF-16BE",new Integer(4)};
}
if (b0 == 0x3C && b1 == 0x00 && b2 == 0x3F && b3 == 0x00) {
// UTF-16, little-endian, no BOM
// (or could turn out to be UCS-2...
return new Object[]{"UTF-16LE",new Integer(4)};
}
if (b0 == 0x4C && b1 == 0x6F && b2 == 0xA7 && b3 == 0x94) {
// EBCDIC
// a la xerces1, return CP037 instead of EBCDIC here
return new Object[]{"CP037",new Integer(4)};
}
throw new Exception("unknow");
}
分享到:
相关推荐
利用chardet,cpdetector包获取文件格式,并判断文件类型是否带BOM
bom探测与自动修复工具 php bom utf 网页中出现bom头(不一定是页头)会导致页面样式变形。比如用户私自用记事本编辑了文件,如thinkphp框架config.php文件等…… 这个工具,放到网页根目录,第一次直接访问,会...
用于探查文本类文件的编码格式,包括任何以文本方式保存的文件,都可以探查出来。 文本类文件编码格式有以下几种: 1)ASCII',这是西文字母 2)ANSI(GBK)',这是兼容西文字母的中文格式 3)UTF-8',这是不带BOM...
公司BOM编码规则
1、Qt实现的gbk/utf8无bom文本转码小工具 2、用到了QDir QDirIterator 递归文件目录 3、QTextStream 以某种编码格式读取文本保存到QString,然后以另一种编码格式保存文本 代码比较简单。
BOM分层和编码()原金蝶内部绝密教程)
PCB_PCBA_BOM编码和版本管理.pdf
ANSI --> Unicode ANSI --> Unicode big endian ANSI --> UTF-8 ...ansi转别的,不检验BOM,一律作为ansi编码进行转换 unicode转别的,首先检验BOM,不合格不转换 utf8转别的,首先检验BOM,不合格不转换
自动编码识别 BOM
当上传文件存在中文时,修改上传文件编码为utf-8-bom
本文是根据BOM相关内训资料整理,"BOM与物料编码"PDF,
文本网页编码批量转换工具是网页文件、文本文件编码批量转换的工具,可以批量将文本类文件批量转换为utf-8 ansi(gb2312) unicode等编码。 文本网页编码批量转换工具 v1.5更新日志 新版新增功能:UTF-8可以转换为...
NULL 博文链接:https://henry8088.iteye.com/blog/780743
详细介绍BOM编码规则,包含电子元器件,五金件,线材,辅料等相关物料的编码规则,方便企业进行物料管理,建立物料电子台账,使物料查询方便快捷。
支持所有文本格式的文档(如 txt,js,css,java,c..),二进制或程序(如word,excel,exe文件)不要使用本转换工具,因为是JAVA程序 需要你的机器上已经安装了JDK 使用方法: 1,打开start.sh文件,windows用户把扩展名.sh...
压缩包内包含 ecj-4.6.2.jar 和 Util.class两个文件 使用说明: 1. 如果你的IDEA是2017.2.2版本,那么直接把ecj-4.6.2.jar放到你的IDEA安装目录下lib文件夹中替换原文件即可 2. 如果你是其他版本的IDEA,那么用压缩...
前次一次工程开发,有...本压缩包附带GB/BIG/UTF-8文件编码批量转换工具(文件名:GB2UTF81.exe) 这个工具很好很强大 还有一个bom批量检测清除工具,php版本的。只可惜只支持当前目录。不支持子目录(文件名:bom.php)
java去掉txt文本的bom头信息,网上找了很多资料,自己整合了一下。
BOM表系列特征编码法在纺机制造ERP中的应用.pdf
此文件用于快速反查php文件中的UTF8编码的文件是不是加了BOM,有则显示,无则跳过。(php源码)。 用途:主要用于整站所有文件为utf8无bom文件,个别文件却存bom,而造成的如:Warning: Cannot modify header information - ...