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 相关文章推荐
Springboot集成阿里云OSS上传文件系统教程
Jun 28 Java/Android
Spring Boot 排除某个类加载注入IOC的操作
Aug 02 Java/Android
java调用Restful接口的三种方法
Aug 23 Java/Android
Java Spring 控制反转(IOC)容器详解
Oct 05 Java/Android
Jpa Specification如何实现and和or同时使用查询
Nov 23 Java/Android
mybatis源码解读之executor包语句处理功能
Feb 15 Java/Android
RestTemplate如何通过HTTP Basic Auth认证示例说明
Mar 17 Java/Android
Netty分布式客户端处理接入事件handle源码解析
Mar 25 Java/Android
Spring Data JPA框架自定义Repository接口
Apr 28 Java/Android
详解Flutter自定义应用程序内键盘的实现方法
Jun 14 Java/Android
SpringBoot接入钉钉自定义机器人预警通知
Jul 15 Java/Android
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
Aug 05 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/10/09 PHP
php替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
JQuery的一些小应用收集
2010/03/27 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
AngularJS中$apply方法和$watch方法用法总结
2016/12/13 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
python读取文本中的坐标方法
2018/10/14 Python
简单了解Python生成器是什么
2019/07/02 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
解决Python二维数组赋值问题
2019/11/28 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
Python实现石头剪刀布游戏
2021/01/20 Python
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
中国入世承诺
2014/04/01 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
工资收入证明
2014/10/07 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
高中班主任寄语
2019/06/21 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript