`
凤凰山
  • 浏览: 148061 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

自动探测文件编码

 
阅读更多
public static String get_charset( File file ) {
        String charset = "GBK";
        byte[] first3Bytes = new byte[3];
        try {
            boolean checked = false;
            BufferedInputStream bis = new BufferedInputStream( new FileInputStream( file ) );
            bis.mark( 0 );
            int read = bis.read( first3Bytes, 0, 3 );
            if ( read == -1 ) return charset;
            if ( first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE ) {
                charset = "UTF-16LE";
                checked = true;
            }
            else if ( first3Bytes[0] == (byte) 0xFE && first3Bytes[1] == (byte) 0xFF ) {
                charset = "UTF-16BE";
                checked = true;
            }
            else if ( first3Bytes[0] == (byte) 0xEF && first3Bytes[1] == (byte) 0xBB && first3Bytes[2] == (byte) 0xBF ) {
                charset = "UTF-8";
                checked = true;
            }
            bis.reset();
            if ( !checked ) {
            //    int len = 0;
                int loc = 0;

                while ( (read = bis.read()) != -1 ) {
                    loc++;
                    if ( read >= 0xF0 ) break;
                    if ( 0x80 <= read && read <= 0xBF ) // 单独出现BF以下的,也算是GBK
                    break;
                    if ( 0xC0 <= read && read <= 0xDF ) {
                        read = bis.read();
                        if ( 0x80 <= read && read <= 0xBF ) // 双字节 (0xC0 - 0xDF) (0x80
                                                                        // - 0xBF),也可能在GB编码内
                        continue;
                        else break;
                    }
                    else if ( 0xE0 <= read && read <= 0xEF ) {// 也有可能出错,但是几率较小
                        read = bis.read();
                        if ( 0x80 <= read && read <= 0xBF ) {
                            read = bis.read();
                            if ( 0x80 <= read && read <= 0xBF ) {
                                charset = "UTF-8";
                                break;
                            }
                            else break;
                        }
                        else break;
                    }
                }
                //System.out.println( loc + " " + Integer.toHexString( read ) );
            }

            bis.close();
        } catch ( Exception e ) {
            e.printStackTrace();
        }

        return charset;
    }

分享到:
评论

相关推荐

    NChardet文本文件编码探测库源码,C#,txt文件编码自动探测

    NChardet文本文件编码探测库源码,C#,txt文件编码自动探测 用于自动探测TXT文本文件编码,支持GB2312、UTF-8、ASCII等几乎所有主流编码的探测,使用方法如下: static public Encoding GetEncoding(string bookPath...

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

    `ParsingDetector` 适合处理HTML、XML等结构化的文件,而`JChardetFacade` 是基于Mozilla的JChardet库,能够处理多种文件编码,通常情况下,添加这个探测器就已经能满足大部分需求。 总的来说,Java中判断文件编码...

    Linux下查看文件编码,文件编码格式转换和文件名编码.doc

    其中,encoding 指的是 Vim 内部使用的字符编码方式,fileencoding 指的是当前编辑的文件的字符编码方式,fileencodings 是 Vim 自动探测 fileencoding 的顺序列表,termencoding 指的是终端的字符编码方式。...

    Java字符编码及获取文件编码

    例如,`java.nio.charset.Charset`类提供了识别字符集的功能,但不能自动检测文件编码。通常,我们需要读取文件的前几个字节,然后基于这些字节的特定模式(如BOM,Byte Order Mark)来猜测编码。 Apache Commons ...

    java判断文件编码

    `cpdetector`是字符集探测器,它包含多种字符集识别算法,如JChardet(基于Mozilla的开源项目),用于自动检测文件的编码方式。而`chardet.jar`可能就是JChardet的实现,它基于字节序列的概率模型来识别编码。 `...

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

    总之,这个压缩包提供了深入研究文本文件编码格式探测方法和装置的宝贵资料,无论你是开发人员、IT专业人士还是对数据处理感兴趣的读者,都能从中获益匪浅。通过学习和实践,你可以提升文本数据处理的效率和准确性,...

    判断文本文件编码的C#源码

    总的来说,通过NChardet库和相关的C#源码,我们可以有效地在程序中实现文本文件编码的自动识别,提高程序的兼容性和适应性。正确地处理文本编码,是保障软件正常运行和用户体验的关键步骤之一。

    使用cpdetector 三方库读取文件编码

    在IT行业中,处理文本文件时,正确识别和处理文件编码是一项关键任务。"使用cpdetector 三方库读取文件编码"的主题聚焦于如何利用cpdetector这个第三方库来检测和识别不同文件的字符编码。cpdetector是Java编程语言...

    自动编码识别 BOM

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

    cpdetector.jar java检测文件编码开源jar包

    在Java项目中,开发者可以通过引入cpdetector.jar,调用其API来实现文件编码的检测功能。 使用cpdetector.jar 的步骤通常包括以下几个部分: 1. **添加依赖**:首先,将cpdetector.jar 添加到你的Java项目的类路径...

    java更改文件的编码jar包:cpdetector

    2. **易用性**:`cpdetector`为Java开发者提供了一个简单易用的API,通过几行代码就能集成到项目中,实现文件编码的探测。 3. **兼容性**:由于是基于Java的,所以`cpdetector`可以在任何支持Java的平台上运行,具有...

    bom探测与自动修复工具

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

    Java cpdetector获取文件编码格式所需Jar包

    使用这个库,开发者可以轻松地集成到Java项目中,以解决文件编码识别的问题。 总结来说,`cpdetector`是Java平台上的一个强大的字符集检测工具,它可以检测多种编码格式,包括单字节和多字节字符集。对于处理多样化...

    旋转编码器旋转编码器旋转编码器

    其中,光学编码器使用光栅盘和光电探测器,磁性编码器则采用磁性码盘和磁敏感元件。接触式编码器利用机械触点,适用于恶劣环境。 4. 技术参数: - 分辨率:表示编码器能分辨的最小角度,通常以脉冲数/转来表示。 - ...

    chardet.jar

    自动探测文件的字符编码

    flv 视频播放器探测器 .rar

    在互联网上,尤其是早期,许多在线视频平台采用FLV作为其主要的视频编码格式,因为它具有文件小、加载快的特点,适合在网络带宽有限的环境下播放。 探测器这一术语通常意味着该软件具备自动识别和定位FLV视频的能力...

    针对flv视频探测器

    1. 网络爬虫技术:探测器背后的实现可能涉及到网络爬虫,这是一种自动化程序,可以遍历网站结构,收集信息。 2. HTTP/HTTPS协议:了解HTTP或HTTPS协议对于理解如何通过网络请求获取视频资源至关重要。 3. 视频编码...

    网页媒体探测器网页媒体探测器

    3. **元数据提取**:获取媒体文件的元信息,如文件大小、分辨率、编码方式、创建日期等,帮助用户评估网页的加载速度和媒体质量。 4. **性能分析**:分析媒体文件对网页整体性能的影响,如加载时间、带宽占用等,为...

    不错的无忧捆绑探测器

    除了基本的文件检测功能,无忧捆绑探测器可能还具备其他辅助功能,例如实时保护,能在用户下载文件时自动进行扫描,防止恶意软件在用户不知情的情况下进入系统。此外,定期更新病毒库也是这类工具的标准配置,以保持...

Global site tag (gtag.js) - Google Analytics