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 相关文章推荐
SpringCloud Alibaba 基本开发框架搭建过程
Jun 13 Java/Android
解析Java中的static关键字
Jun 14 Java/Android
总结一下关于在Java8中使用stream流踩过的一些坑
Jun 24 Java/Android
Java基础之详解HashSet的使用方法
Jun 30 Java/Android
Java图书管理系统,课程设计必用(源码+文档)
Jun 30 Java/Android
Java基础-封装和继承
Jul 02 Java/Android
Java反应式框架Reactor中的Mono和Flux
Jul 25 Java/Android
Flutter Navigator 实现路由传递参数
Apr 22 Java/Android
Android 界面一键变灰 深色主题工具类
Apr 28 Java/Android
springboot读取nacos配置文件
May 20 Java/Android
Java处理延时任务的常用几种解决方案
Jun 01 Java/Android
Java实现贪吃蛇游戏的示例代码
Sep 23 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
深入解析PHP的引用计数机制
2013/06/14 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
Thinkphp+smarty+uploadify实现无刷新上传
2015/07/30 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
文本框的字数限制功能jquery插件
2009/11/24 Javascript
基于jQuery的获取标签名的代码
2012/07/16 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
javascript回到顶部特效
2016/07/30 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
JavaScript 扩展运算符用法实例小结【基于ES6】
2019/06/17 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
干部培训自我鉴定
2014/01/22 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers