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 相关文章推荐
源码解读Spring-Integration执行过程
Jun 11 Java/Android
解决tk mapper 通用mapper的bug问题
Jun 16 Java/Android
详解SpringBoot异常处理流程及原理
Jun 21 Java/Android
实体类或对象序列化时,忽略为空属性的操作
Jun 30 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 Java/Android
java项目构建Gradle的使用教程
Mar 24 Java/Android
Java字符缓冲流BufferedWriter
Apr 09 Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
Apr 24 Java/Android
springcloud整合seata
May 20 Java/Android
Java实现添加条码或二维码到Word文档
Jun 01 Java/Android
Spring Cloud OpenFeign模版化客户端
Jun 25 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 ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
AngularJS实现的简单拖拽功能示例
2018/01/02 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
python 制作简单的音乐播放器
2020/11/25 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
实习生求职自荐信
2014/02/07 职场文书
心理健康日活动总结
2014/05/08 职场文书
计划生育证明格式范本
2014/09/12 职场文书
商铺门面租房协议书
2014/10/21 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python
Java 多线程协作作业之信号同步
2022/05/11 Java/Android