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 相关文章推荐
springboot @ConfigurationProperties和@PropertySource的区别
Jun 11 Java/Android
ConstraintValidator类如何实现自定义注解校验前端传参
Jun 18 Java/Android
如何解决springcloud feign 首次调用100%失败的问题
Jun 23 Java/Android
Java生成读取条形码和二维码的简单示例
Jul 09 Java/Android
Java中CyclicBarrier和CountDownLatch的用法与区别
Aug 23 Java/Android
springboot中的pom文件 project报错问题
Jan 18 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 Java/Android
正则表达式拆分url实例代码
Feb 24 Java/Android
Java并发编程之原子性-Atomic的使用
Mar 16 Java/Android
java高级用法JNA强大的Memory和Pointer
Apr 19 Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
Apr 24 Java/Android
Java使用HttpClient实现文件下载
Aug 14 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随机抽奖实例分析
2015/03/04 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
2019/07/20 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
python flask搭建web应用教程
2019/11/19 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
python实现程序重启和系统重启方式
2020/04/16 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
广告语设计及教案
2014/03/21 职场文书
个人工作主要事迹
2014/05/08 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
离婚起诉书范本
2015/05/18 职场文书
公司仓库管理制度
2015/08/04 职场文书