java获取一个文本文件的编码(格式)信息


Posted in Java/Android onSeptember 23, 2022

前言:

文本文件是我们在windows平台下常用的一种文件格式,

这种格式会随着操作系统的语言不同,而出现其默认的编码不同

那么如何使用程序获取“文本文件”的编码方式呢?

文件编码的格式决定了文件可存储的字符类型,所以得到文件的类型至关重要

下文笔者讲述获取一个文本文件的格式信息的方法分享,如下所示:

现思路:

  • 通过获取文件流的前3个字节
  • 判断其值的方式,即可获取文本文件的编码方式

例:

package com.java265.other;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class Test {
    /*
     * java265.com 获取文本文件的编码方式
     *  
     **/
    public static void main(String[] args)   {
      File file = new File("E://person/java265.com/java.txt");
      System.out.println(GetEncoding(file));
      }
    public static String GetEncoding(File file)
    {
        String charset = "GBK";
        byte[] first3Bytes = new byte[3];
        try {
            boolean checked = false; 
            InputStream is = new FileInputStream(file);
            int read = is.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;
            }else if (first3Bytes[0] == (byte) 0xA
                    && first3Bytes[1] == (byte) 0x5B
                    && first3Bytes[2] == (byte) 0x30) {
                charset = "UTF-8";
                checked = true;
            }else if (first3Bytes[0] == (byte) 0xD
                    && first3Bytes[1] == (byte) 0xA
                    && first3Bytes[2] == (byte) 0x5B) {
                charset = "GBK";
                checked = true;
            }else if (first3Bytes[0] == (byte) 0x5B
                    && first3Bytes[1] == (byte) 0x54
                    && first3Bytes[2] == (byte) 0x49) {
                charset = "windows-1251";
                checked = true;
            }
            //bis.reset();
            InputStream istmp = new FileInputStream(file);
            if (!checked) {
                int loc = 0;
                while ((read = istmp.read()) != -1) {
                    loc++;
                    if (read >= 0xF0)
                        break;
                    if (0x80 <= read && read <= 0xBF)
                        break;
                    if (0xC0 <= read && read <= 0xDF) {
                        read = istmp.read();
                        if (0x80 <= read && read <= 0xBF)
                            continue;
                        else
                            break;
                    } else if (0xE0 <= read && read <= 0xEF) {
                        read = istmp.read();
                        if (0x80 <= read && read <= 0xBF) {
                            read = istmp.read();
                            if (0x80 <= read && read <= 0xBF) {
                                charset = "UTF-8";
                                break;
                            } else
                                break;
                        } else
                            break;
                    }
                }
            }
            is.close();
            istmp.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return charset; 
    }
}

到此这篇关于java获取一个文本文件的编码(格式)信息的文章就介绍到这了,更多相关java获取文本编码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
SpringBoot2 参数管理实践之入参出参与校验的方式
Jun 16 Java/Android
Java elasticsearch安装以及部署教程
Jun 28 Java/Android
JVM钩子函数的使用场景详解
Aug 23 Java/Android
Java SSM配置文件案例详解
Aug 30 Java/Android
JAVA API 实用类 String详解
Oct 05 Java/Android
关于Spring配置文件加载方式变化引发的异常详解
Jan 18 Java/Android
解析探秘fescar分布式事务实现原理
Feb 28 Java/Android
Java 数据结构七大排序使用分析
Apr 02 Java/Android
Java 深入探究讲解简单工厂模式
Apr 07 Java/Android
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
Apr 13 Java/Android
详解Flutter网络请求Dio库的使用及封装
Apr 14 Java/Android
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
Jun 01 Java/Android
JDK8中String的intern()方法实例详细解读
Sep 23 #Java/Android
Spring boot实现上传文件到本地服务器
Aug 14 #Java/Android
Spring Boot实现文件上传下载
Aug 14 #Java/Android
Springboot集成kafka高级应用实战分享
spring boot实现文件上传
Aug 14 #Java/Android
Java使用HttpClient实现文件下载
Aug 14 #Java/Android
HttpClient实现表单提交上传文件
Aug 14 #Java/Android
You might like
PHP的分页功能
2007/03/21 PHP
PHP分页显示制作详细讲解
2008/11/19 PHP
php auth_http类库进行身份效验
2009/03/19 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
javascript与CSS复习(二)
2010/06/29 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
JavaScript OOP面向对象介绍
2010/12/02 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
javascript中arguments,callee,caller详解
2016/03/16 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Python变量访问权限控制详解
2019/06/29 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
医学院毕业生自荐信
2013/11/08 职场文书
高中生自我评价个人范文
2013/11/09 职场文书
销售辞职报告范文
2014/01/12 职场文书
企业人事任命书
2014/06/05 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
创卫工作总结2015
2015/04/22 职场文书
2015年派出所工作总结
2015/04/24 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python
在项目中使用redis做缓存的一些思路
2021/09/14 Redis