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中的OPTIONAL
Jun 14 Java/Android
解决tk mapper 通用mapper的bug问题
Jun 16 Java/Android
图解排序算法之希尔排序Java实现
Jun 26 Java/Android
java基础——多线程
Jul 03 Java/Android
Spring实现内置监听器
Jul 09 Java/Android
java设计模式--三种工厂模式详解
Jul 21 Java/Android
java代码实现空间切割
Jan 18 Java/Android
关于Spring配置文件加载方式变化引发的异常详解
Jan 18 Java/Android
java objectUtils 使用可能会出现的问题
Feb 28 Java/Android
MybatisPlus EntityWrapper如何自定义SQL
Mar 22 Java/Android
Flutter集成高德地图并添加自定义Maker的实践
Apr 07 Java/Android
Java Spring读取和存储详细操作
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
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
Python比较两个图片相似度的方法
2015/03/13 Python
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
python RSA加密的示例
2020/12/09 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
耐克巴西官方网站:Nike巴西
2016/08/14 全球购物
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
成品仓管员岗位职责
2013/12/11 职场文书
演讲稿的格式及范文
2014/08/22 职场文书
大学生入党群众意见书
2015/06/02 职场文书
公司董事任命书
2015/09/21 职场文书