java读取文件字符集示例方法

 更新时间:2014年02月24日 09:39:55   作者:  
这篇文章主要介绍了java读取文件字符集的示例,需要的朋友可以参考下

复制代码 代码如下:

public static String getCharset(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 loc = 0;
                while ((read = bis.read()) != -1) {
                    loc++;
                    if (read >= 0xF0)
                        break;
                    //单独出现BF以下的,也算是GBK
                    if (0x80 <= read && read <= 0xBF)
                        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;
    }

相关文章

  • Java微服务实战项目尚融宝接口创建详解

    Java微服务实战项目尚融宝接口创建详解

    这篇文章主要介绍了Java微服务实战项目尚融宝的接口创建流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Java源码解析之TypeVariable详解

    Java源码解析之TypeVariable详解

    这篇文章主要介绍了Java源码解析之TypeVariable详解,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • SSM框架实现分页和搜索分页的示例代码

    SSM框架实现分页和搜索分页的示例代码

    本篇文章主要介绍了SSM框架实现分页和搜索分页的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Jmeter实现Base64编码的两种方式

    Jmeter实现Base64编码的两种方式

    这篇文章主要介绍了Jmeter实现Base64编码,大家都知道Jmeter实现Base64编码有两种方式,本文通过图文并茂的形式把每种方法给大家介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • 详解Java线程编程中的volatile关键字的作用

    详解Java线程编程中的volatile关键字的作用

    这篇文章主要介绍了Java线程编程中的volatile关键字的作用,针对其禁止进行指令重排序和读写内存方面着重讲解,需要的朋友可以参考下
    2015-12-12
  • java中获取json的所有key方法

    java中获取json的所有key方法

    下面小编就为大家分享一篇java中获取json的所有key方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Java数据结构之常见排序算法(下)

    Java数据结构之常见排序算法(下)

    这篇文章主要介绍了Java数据结构之常见排序算法(下),与之相对有(上),想了解的朋友可以去本网站扫搜,在这两篇文章里涵盖关于八大排序算法的所有内容,需要的朋友可以参考下
    2023-01-01
  • SpringSession会话管理之Redis与JDBC存储实现方式

    SpringSession会话管理之Redis与JDBC存储实现方式

    本文将详细介绍Spring Session的核心概念、特性以及如何使用Redis和JDBC来实现会话存储,帮助开发者构建更加健壮和可扩展的应用系统,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • @MapperScan注解与@Mapper注解的使用

    @MapperScan注解与@Mapper注解的使用

    这篇文章主要介绍了@MapperScan注解与@Mapper注解的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java多线程 线程组原理及实例详解

    Java多线程 线程组原理及实例详解

    这篇文章主要介绍了Java多线程 线程组原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09

最新评论