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 11 Java/Android
Spring Boot 启动、停止、重启、状态脚本
Jun 26 Java/Android
一篇文章带你复习java知识点
Jun 28 Java/Android
Maven学习----Maven安装与环境变量配置教程
Jun 29 Java/Android
Java数组与堆栈相关知识总结
Jun 29 Java/Android
Java实现多文件上传功能
Jun 30 Java/Android
Springboot配置suffix指定mvc视图的后缀方法
Jul 03 Java/Android
springboot layui hutool Excel导入的实现
Mar 31 Java/Android
springboot用户数据修改的详细实现
Apr 06 Java/Android
Java后端 Dubbo retries 超时重试机制的解决方案
Apr 14 Java/Android
java开发双人五子棋游戏
May 06 Java/Android
Spring JPA 增加字段执行异常问题及解决
Jun 10 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代码保护--Zend Guard的使用详解
2013/06/03 PHP
WebQQ最新登陆协议的用法
2014/12/22 PHP
ecshop实现smtp发送邮件
2015/02/03 PHP
Firefox outerHTML实现代码
2009/06/04 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
全面理解Python中self的用法
2016/06/04 Python
python、java等哪一门编程语言适合人工智能?
2017/11/13 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
Python KMeans聚类问题分析
2018/02/23 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
简述synchronized和java.util.concurrent.locks.Lock的异同
2014/12/08 面试题
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
超级搞笑检讨书
2014/01/15 职场文书
小学班主任寄语大全
2014/04/04 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
爱护公物演讲稿
2014/09/09 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python
SQL Server中使用表变量和临时表
2022/05/20 SQL Server