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内存模型之happens-before概念详解
Jun 13 Java/Android
教你用Java在个人电脑上实现微信扫码支付
Jun 13 Java/Android
ConstraintValidator类如何实现自定义注解校验前端传参
Jun 18 Java/Android
启动Tomcat时出现大量乱码的解决方法
Jun 21 Java/Android
解决SpringBoot文件上传临时目录找不到的问题
Jul 01 Java/Android
springboot如何接收application/x-www-form-urlencoded类型的请求
Nov 02 Java/Android
详解Spring Security中的HttpBasic登录验证模式
Mar 17 Java/Android
Elasticsearch Recovery 详细介绍
Apr 19 Java/Android
Java 多态分析
Apr 26 Java/Android
SpringBoot深入分析讲解监听器模式下
Jul 15 Java/Android
JDK8中String的intern()方法实例详细解读
Sep 23 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
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
PHP删除非空目录的函数代码小结
2013/02/28 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
Vue项目中如何引入icon图标
2018/03/28 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
JSONObject与JSONArray使用方法解析
2020/09/28 Javascript
python实现sublime3的less编译插件示例
2014/04/27 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
机电一体化专业应届生求职信
2013/11/27 职场文书
中华美德颂演讲稿
2014/05/20 职场文书
村级个人对照检查材料
2014/08/22 职场文书
作风建设年活动总结
2014/08/27 职场文书
教师考核表个人总结
2015/02/12 职场文书
2015元旦感言
2015/12/09 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技