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 26 Java/Android
Spring Boot两种全局配置和两种注解的操作方法
Jun 29 Java/Android
浅谈自定义校验注解ConstraintValidator
Jun 30 Java/Android
Java并发编程必备之Future机制
Jun 30 Java/Android
Spring实现内置监听器
Jul 09 Java/Android
gateway与spring-boot-starter-web冲突问题的解决
Jul 16 Java/Android
浅谈spring boot使用thymeleaf版本的问题
Aug 04 Java/Android
使用springMVC所需要的pom配置
Sep 15 Java/Android
Java9新特性之Module模块化编程示例演绎
Mar 16 Java/Android
Spring Boot项目如何优雅实现Excel导入与导出功能
Jun 10 Java/Android
Java实现注册登录跳转
Jun 16 Java/Android
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
第八节--访问方式
2006/11/16 PHP
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
PHP--用万网的接口实现域名查询功能
2012/12/13 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
个人写的PHP验证码生成类分享
2014/08/21 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
JS获取当前日期时间并定时刷新示例
2021/03/04 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
全面了解js中的script标签
2016/07/04 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
利用nodeJs anywhere搭建本地服务器环境的方法
2018/05/12 NodeJs
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
Python的动态重新封装的教程
2015/04/11 Python
python实现诗歌游戏(类继承)
2019/02/26 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
Python虚拟环境的原理及使用详解
2019/07/02 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
2020/04/08 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
Orlebar Brown官网:设计师泳裤和泳装
2020/12/08 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
2016简历自荐信优秀范文
2016/01/29 职场文书
React更新渲染原理深入分析
2022/12/24 Javascript