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 29 Java/Android
详解Spring事件发布与监听机制
Jun 30 Java/Android
Java使用httpRequest+Jsoup爬取红蓝球号码
Jul 02 Java/Android
Java移除无效括号的方法实现
Aug 07 Java/Android
MybatisPlus EntityWrapper如何自定义SQL
Mar 22 Java/Android
Java 数据结构七大排序使用分析
Apr 02 Java/Android
Android Flutter实现3D动画效果示例详解
Apr 07 Java/Android
详解Spring Bean的配置方式与实例化
Jun 10 Java/Android
Java完整实现记事本代码
Jun 16 Java/Android
springboot集成redis存对象乱码的问题及解决
Jun 16 Java/Android
springboot+rabbitmq实现智能家居实例详解
Jul 23 Java/Android
OpenFeign实现远程调用
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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
用PHP制作静态网站的模板框架(一)
2006/10/09 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
Javascript编写2048小游戏
2015/07/07 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
Javasript设计模式之链式调用详解
2018/04/26 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
python运行时间的几种方法
2016/06/17 Python
机器学习python实战之决策树
2017/11/01 Python
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
深入了解Python 方法之类方法 &amp; 静态方法
2020/08/17 Python
python里glob模块知识点总结
2021/01/05 Python
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
屈臣氏俄罗斯在线商店:Watsons俄罗斯
2020/08/03 全球购物
会计专业应届生自荐信
2014/02/07 职场文书
土地转让协议书
2014/04/15 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
商务英语专业求职信
2014/06/26 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python
python随机打印成绩排名表
2021/06/23 Python