`
balaschen
  • 浏览: 192344 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

通过BOM探测文本文件编码类型

阅读更多

从tomcat源码抄来的改的redface:

 

 

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)

    在Java编程中,处理文件编码是一项常见的任务,特别是在读取、写入或转换文本文件时。文件编码决定了字符集的表示方式,而BOM(Byte Order Mark)则是一种特殊的Unicode标记,用于标识文件的编码类型。本文将详细...

    Java判断文件编码格式 - 明明是悟空 - 博客园1

    该项目包含了多种探测器,如ParsingDetector、JChardetFacade、ASCIIDetector和UnicodeDetector等,它们各自负责不同类型的编码识别。以下是如何使用cpdetector库进行编码检测的示例代码: ```java cpdetector.io....

    bom探测与自动修复工具

    bom探测与自动修复工具 php bom utf 网页中出现bom头(不一定是页头)会导致页面样式变形。比如用户私自用记事本编辑了文件,如thinkphp框架config.php文件等…… 这个工具,放到网页根目录,第一次直接访问,会...

    无头BOM的UTF8文件判断

    标题中的“无头BOM的UTF8文件判断”是指在处理UTF-8编码的文本文件时,关注那些没有字节顺序标记(Byte Order Mark,简称BOM)的文件。BOM是一个可选的Unicode签名,通常出现在文件的开头,用于标识文件采用的字符...

    文本文件编码探查.zip

    用于探查文本类文件的编码格式,包括任何以文本方式保存的文件,都可以探查出来。 文本类文件编码格式有以下几种: 1)ASCII',这是西文字母 2)ANSI(GBK)',这是兼容西文字母的中文格式 3)UTF-8',这是不带BOM...

    Python文本模式匹配与TXT文件编码类型的识别.pdf

    文档中还提供了一个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 - ...

    批量utf文件转utf8-bom

    BOM是一个特殊的字节序列,用于标识文件的编码类型,对于UTF-8编码,BOM的字节序列为0xEF, 0xBB, 0xBF。 在Windows操作系统环境下,经常需要进行这样的转换,因为某些程序或系统可能更倾向于识别带有BOM的UTF-8编码...

    公司BOM编码规则

    通过这个实例,我们可以看到,卡尔雷斯科技(深圳)有限公司的BOM编码规则可以唯一地标识一个组件,包括其生产型号、主型号、组件类型、关键词、顺序号和厂家编号等信息。 结论 卡尔雷斯科技(深圳)有限公司的BOM...

    java程序判断文件编码的类型

    本文档旨在教导读者如何通过Java编程语言来判断文件的编码类型。这包括常见的编码格式如GBK、UTF-8等。了解文件编码对于处理多语言环境下的文本数据至关重要。 #### 详细知识点解析 ##### 文件编码类型简介 文件...

    文本文件编码转换

    在IT领域,文本文件编码是数据存储和传输中不可或缺的一部分,尤其在跨平台或国际化的环境中,正确理解和处理各种编码格式至关重要。本话题主要聚焦于“文本文件编码转换”,特别是如何将指定目录内的所有文本文件...

    批量移除文件的BOM格式

    在编程世界里,BOM(Byte Order Mark)是一种特殊的Unicode字符,用于标识文件的编码方式。在UTF-8编码中,BOM是...同时,这也提醒我们在编写或处理文本文件时,应尽可能遵循无BOM的UTF-8编码标准,以避免兼容性问题。

    java去掉txt文本的bom头信息

    总结,处理TXT文本文件的BOM头信息是Java开发中的常见任务,通过理解BOM的含义和字节流、字符流的工作原理,我们可以有效地实现去除BOM头的功能。在实际应用中,根据文件大小和性能需求选择合适的方法,确保代码既...

    行业分类-设备装置-文本文件的编码格式探测方法和装置.zip

    **文本文件的编码格式探测方法与装置:深度解析** 随着信息技术的飞速发展,文本文件的处理已经成为日常工作中不可或缺的一部分。在各种数据交流和信息处理中,正确识别和转换文本文件的编码格式至关重要,因为它...

    一款在线文本批量替换工具,能自动识别文件编码类型,在线批量替换文本文件中的字符的asp原创程序.

    这个工具的独特之处在于它能够“自动识别文件编码类型”,这意味着它可以处理不同格式的文本文件,包括但不限于ASCII、UTF-8、GBK等常见的文本编码方式。在处理各种编码类型的文件时,这一功能确保了程序正确读取和...

    自动编码识别 BOM

    自动编码识别(BOM)在IT领域中是一项至关重要的技术,尤其是在处理文本文件时。BOM,全称Byte Order Mark,是一种特殊的Unicode字符,用于标识文件的编码格式。熊猫看书作为一款阅读软件,能自动识别包括GBK、UTF8...

    IDEA支持带BOM的UTF-8编码文件.rar

    2. **新建文件**:在创建新文件时,可以选择编码类型。虽然UTF-8无BOM是更常见的选择,但IDEA也允许创建带BOM的UTF-8文件。 3. **保存文件**:在保存文件时,可以通过设置选择是否添加BOM。这在与不支持BOM的系统...

    WIN10文本文档编码UTF-8改为ANSI解决方法,亲测成功,不是复制别人

    在Windows 10操作系统中,文本文档默认的编码方式通常是UTF-8,这是一种国际通用的字符编码标准,能够支持全球大部分语言的字符。然而,有些老式程序或特定场景可能需要使用ANSI编码,它基于ASCII编码,仅包含128个...

    Qt实现的gbk/utf8无bom文本转码小工具

    1、Qt实现的gbk/utf8无bom文本转码小工具 2、用到了QDir QDirIterator 递归文件目录 3、QTextStream 以某种编码格式读取文本保存到QString,然后以另一种编码格式保存文本 代码比较简单。

Global site tag (gtag.js) - Google Analytics