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输出Hello World完美过程解析
Jun 13 Java/Android
SpringBoot实现异步事件驱动的方法
Jun 28 Java/Android
分析JVM源码之Thread.interrupt系统级别线程打断
Jun 29 Java/Android
Java使用httpRequest+Jsoup爬取红蓝球号码
Jul 02 Java/Android
Java 语言中Object 类和System 类详解
Jul 07 Java/Android
Java数据开发辅助工具Docker与普通程序使用方法
Sep 15 Java/Android
Java实现给Word文件添加文字水印
Feb 15 Java/Android
alibaba seata服务端具体实现
Feb 24 Java/Android
Android Studio实现带三角函数对数运算功能的高级计算器
May 20 Java/Android
前端与RabbitMQ实时消息推送未读消息小红点实现示例
Jul 23 Java/Android
Java获取字符串编码格式实现思路
Sep 23 Java/Android
Java Redisson多策略注解限流
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
用PHP函数解决SQL injection
2006/12/09 PHP
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
js 判断数据类型的几种方法
2017/01/13 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
详解React中setState回调函数
2018/06/14 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
SQL Server笔试题
2012/01/10 面试题
计算机大学生的自我评价
2013/10/15 职场文书
函授本科个人自我鉴定
2014/03/25 职场文书
我的老师教学反思
2014/05/01 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
Python中相见恨晚的技巧
2021/04/13 Python
go原生库的中bytes.Buffer用法
2021/04/25 Golang
Python基础之元组与文件知识总结
2021/05/19 Python