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 Shutdown Hook场景使用及源码分析
Jun 15 Java/Android
浅谈@Value和@Bean的执行顺序问题
Jun 16 Java/Android
探讨Java中的深浅拷贝问题
Jun 26 Java/Android
Java 语言中Object 类和System 类详解
Jul 07 Java/Android
Java org.w3c.dom.Document 类方法引用报错
Aug 07 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 Java/Android
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
Mar 21 Java/Android
Android开发实现极为简单的QQ登录页面
Apr 24 Java/Android
Java存储没有重复元素的数组
Apr 29 Java/Android
Java 死锁解决方案
May 11 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
Jun 21 Java/Android
Android实现图片九宫格
Jun 28 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无限分类源码分享(思路不错)
2011/10/13 PHP
php导入模块文件分享
2015/03/17 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
python 重定向获取真实url的方法
2018/05/11 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
个人职业生涯规划书1500字
2013/12/31 职场文书
《小鹰学飞》教学反思
2014/04/23 职场文书
实习协议书范本
2014/09/25 职场文书
单位考核聘任报告
2015/03/02 职场文书
校长师德表现自我评价
2015/03/05 职场文书
销售员自我评价
2015/03/11 职场文书
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang
python通过新建环境安装tfx的问题
2022/05/20 Python