从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");
}
分享到:
相关推荐
在Java编程中,处理文件编码是一项常见的任务,特别是在读取、写入或转换文本文件时。文件编码决定了字符集的表示方式,而BOM(Byte Order Mark)则是一种特殊的Unicode标记,用于标识文件的编码类型。本文将详细...
该项目包含了多种探测器,如ParsingDetector、JChardetFacade、ASCIIDetector和UnicodeDetector等,它们各自负责不同类型的编码识别。以下是如何使用cpdetector库进行编码检测的示例代码: ```java cpdetector.io....
bom探测与自动修复工具 php bom utf 网页中出现bom头(不一定是页头)会导致页面样式变形。比如用户私自用记事本编辑了文件,如thinkphp框架config.php文件等…… 这个工具,放到网页根目录,第一次直接访问,会...
标题中的“无头BOM的UTF8文件判断”是指在处理UTF-8编码的文本文件时,关注那些没有字节顺序标记(Byte Order Mark,简称BOM)的文件。BOM是一个可选的Unicode签名,通常出现在文件的开头,用于标识文件采用的字符...
用于探查文本类文件的编码格式,包括任何以文本方式保存的文件,都可以探查出来。 文本类文件编码格式有以下几种: 1)ASCII',这是西文字母 2)ANSI(GBK)',这是兼容西文字母的中文格式 3)UTF-8',这是不带BOM...
文档中还提供了一个Python函数FileProcess的示例代码,展示了如何读取、处理和写入文本文件,以及如何在处理文本时考虑到编码的兼容性和异常处理。通过这篇文章,读者可以了解到使用Python处理文本模式匹配和编码...
1. **查看BOM**:UTF-8、UTF-16LE和UTF-16BE都有BOM(Byte Order Mark)作为文件的开头,通过检测这个特殊的字符可以快速识别编码类型。 2. **统计频率**:对文件中的字符出现频率进行分析,根据ASCII、UTF-8和...
本文将深入讲解易语言中的源码如何实现识别文本文件的编码类型,包括UTF16、UTF32、UTF8以及ANSI这四种常见的编码方式。 首先,我们要理解这四种编码的基本概念: 1. **UTF16**:Unicode Transformation Format - ...
BOM是一个特殊的字节序列,用于标识文件的编码类型,对于UTF-8编码,BOM的字节序列为0xEF, 0xBB, 0xBF。 在Windows操作系统环境下,经常需要进行这样的转换,因为某些程序或系统可能更倾向于识别带有BOM的UTF-8编码...
通过这个实例,我们可以看到,卡尔雷斯科技(深圳)有限公司的BOM编码规则可以唯一地标识一个组件,包括其生产型号、主型号、组件类型、关键词、顺序号和厂家编号等信息。 结论 卡尔雷斯科技(深圳)有限公司的BOM...
本文档旨在教导读者如何通过Java编程语言来判断文件的编码类型。这包括常见的编码格式如GBK、UTF-8等。了解文件编码对于处理多语言环境下的文本数据至关重要。 #### 详细知识点解析 ##### 文件编码类型简介 文件...
在IT领域,文本文件编码是数据存储和传输中不可或缺的一部分,尤其在跨平台或国际化的环境中,正确理解和处理各种编码格式至关重要。本话题主要聚焦于“文本文件编码转换”,特别是如何将指定目录内的所有文本文件...
在编程世界里,BOM(Byte Order Mark)是一种特殊的Unicode字符,用于标识文件的编码方式。在UTF-8编码中,BOM是...同时,这也提醒我们在编写或处理文本文件时,应尽可能遵循无BOM的UTF-8编码标准,以避免兼容性问题。
总结,处理TXT文本文件的BOM头信息是Java开发中的常见任务,通过理解BOM的含义和字节流、字符流的工作原理,我们可以有效地实现去除BOM头的功能。在实际应用中,根据文件大小和性能需求选择合适的方法,确保代码既...
**文本文件的编码格式探测方法与装置:深度解析** 随着信息技术的飞速发展,文本文件的处理已经成为日常工作中不可或缺的一部分。在各种数据交流和信息处理中,正确识别和转换文本文件的编码格式至关重要,因为它...
这个工具的独特之处在于它能够“自动识别文件编码类型”,这意味着它可以处理不同格式的文本文件,包括但不限于ASCII、UTF-8、GBK等常见的文本编码方式。在处理各种编码类型的文件时,这一功能确保了程序正确读取和...
自动编码识别(BOM)在IT领域中是一项至关重要的技术,尤其是在处理文本文件时。BOM,全称Byte Order Mark,是一种特殊的Unicode字符,用于标识文件的编码格式。熊猫看书作为一款阅读软件,能自动识别包括GBK、UTF8...
2. **新建文件**:在创建新文件时,可以选择编码类型。虽然UTF-8无BOM是更常见的选择,但IDEA也允许创建带BOM的UTF-8文件。 3. **保存文件**:在保存文件时,可以通过设置选择是否添加BOM。这在与不支持BOM的系统...
在Windows 10操作系统中,文本文档默认的编码方式通常是UTF-8,这是一种国际通用的字符编码标准,能够支持全球大部分语言的字符。然而,有些老式程序或特定场景可能需要使用ANSI编码,它基于ASCII编码,仅包含128个...
1、Qt实现的gbk/utf8无bom文本转码小工具 2、用到了QDir QDirIterator 递归文件目录 3、QTextStream 以某种编码格式读取文本保存到QString,然后以另一种编码格式保存文本 代码比较简单。