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 相关文章推荐
Java各种比较对象的方式的对比总结
Jun 20 Java/Android
分析ZooKeeper分布式锁的实现
Jun 30 Java/Android
java中用float时,数字后面加f,这样是为什么你知道吗
Sep 04 Java/Android
Spring事务管理下synchronized锁失效问题的解决方法
Mar 31 Java/Android
Java字符缓冲流BufferedWriter
Apr 09 Java/Android
Android开发实现极为简单的QQ登录页面
Apr 24 Java/Android
Java 数组的使用
May 11 Java/Android
springcloud整合seata
May 20 Java/Android
Android开发手册Chip监听及ChipGroup监听
Jun 10 Java/Android
Java完整实现记事本代码
Jun 16 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
Jun 21 Java/Android
volatile保证可见性及重排序方法
Aug 05 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投票系统防刷票判断流程分析
2012/02/04 PHP
解析php addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
JavaScript更改class和id的方法
2008/10/10 Javascript
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
微信小程序  生命周期详解
2016/10/27 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
python基础教程之面向对象的一些概念
2014/08/29 Python
使用Python的PIL模块来进行图片对比
2016/02/18 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
is_file和file_exists效率比较
2021/03/14 PHP
岗位竞聘演讲稿
2014/01/10 职场文书
仓库规划计划书
2014/04/28 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书
微信小程序基础教程之echart的使用
2021/06/01 Javascript
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
mysql如何能有效防止删库跑路
2021/10/05 MySQL