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 相关文章推荐
JPA如何使用entityManager执行SQL并指定返回类型
Jun 15 Java/Android
idea搭建可运行Servlet的Web项目
Jun 26 Java/Android
Springboot使用Spring Data JPA实现数据库操作
Jun 30 Java/Android
Java基础-封装和继承
Jul 02 Java/Android
使用@Value值注入及配置文件组件扫描
Jul 09 Java/Android
Java设计模式之享元模式示例详解
Mar 03 Java/Android
Spring this调用当前类方法无法拦截的示例代码
Mar 20 Java/Android
Java对文件的读写操作方法
Apr 29 Java/Android
java开发双人五子棋游戏
May 06 Java/Android
Spring 使用注解开发
May 20 Java/Android
Java中生成微信小程序太阳码的实现方案
Jun 01 Java/Android
Java 多线程并发FutureTask
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巧获服务器端信息
2006/12/06 PHP
PHP中通过ADO调用Access数据库的方法测试不通过
2006/12/31 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
JS 有名函数表达式全面解析
2010/03/19 Javascript
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
浅析Javascript ES6新增值比较函数Object.is
2016/08/24 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
angularJS深拷贝详解
2017/03/23 Javascript
NodeJs通过async/await处理异步的方法
2017/10/09 NodeJs
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
Python 比较两个数组的元素的异同方法
2017/08/17 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
python中web框架的自定义创建
2019/09/08 Python
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
中间件分为哪几类
2016/09/18 面试题
MYSQL支持事务吗
2013/08/09 面试题
三下乡活动方案
2014/01/31 职场文书
求职意向书范文
2014/04/01 职场文书
捐款倡议书
2014/04/14 职场文书
设计师求职信
2014/07/01 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers