Java获取字符串编码格式实现思路


Posted in Java/Android onSeptember 23, 2022

Java——获取字符串编码格式

判断一个字符串的编码格式: 

public static String getEncoding(String str) {
        String encode = "GB2312";
        try {
            if (isEncoding(str, encode)) { // 判断是不是GB2312
                return encode;
            }
        } catch (Exception exception) {
        }
        encode = "ISO-8859-1";
        try {
            if (isEncoding(str, encode)) { // 判断是不是ISO-8859-1
                return encode;
            }
        } catch (Exception exception1) {
        }
        encode = "UTF-8";
        try {
            if (isEncoding(str, encode)) { // 判断是不是UTF-8
                return encode;
            }
        } catch (Exception exception2) {
        }
        encode = "GBK";
        try {
            if (isEncoding(str, encode)) { // 判断是不是GBK
                return encode;
            }
        } catch (Exception exception3) {
        }
        return ""; // 如果都不是,说明输入的内容不属于常见的编码格式。
    }

    public static boolean isEncoding(String str, String encode) {
        try {
            if (str.equals(new String(str.getBytes(), encode))) {
                return true;
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return false;
    }

Java获取一个文本文件的编码格式

文本文件是我们在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分布式事务的 6 种解决方案
Jun 26 Java/Android
详解Spring Boot使用系统参数表提升系统的灵活性
Jun 30 Java/Android
Java使用jmeter进行压力测试
Jul 09 Java/Android
Spring-cloud Config Server的3种配置方式
Sep 25 Java/Android
Java8中接口的新特性使用指南
Nov 01 Java/Android
Java 在生活中的 10 大应用
Nov 02 Java/Android
maven依赖的version声明控制方式
Jan 18 Java/Android
Spring Boot DevTools 全局配置学习指南
Mar 31 Java/Android
Spring Boot 底层原理基础深度解析
Apr 03 Java/Android
springboot应用服务启动事件的监听实现
Apr 06 Java/Android
Java后端 Dubbo retries 超时重试机制的解决方案
Apr 14 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
Jun 21 Java/Android
java获取一个文本文件的编码(格式)信息
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
You might like
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
jquery select(列表)的操作(取值/赋值)
2011/03/16 Javascript
理清apply(),call()的区别和关系
2011/08/14 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
[02:00]DAC2018主宣传片——龙征四海,剑问东方
2018/03/20 DOTA
python读写ini配置文件方法实例分析
2015/06/30 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
应付会计岗位职责
2013/12/12 职场文书
网站美工岗位职责
2014/04/02 职场文书
运动会班级口号
2014/06/09 职场文书
董事长助理工作职责范本
2014/07/01 职场文书
售后客服个人自我评价
2014/09/14 职场文书
公司更名通知函
2015/04/24 职场文书
Python pygame实现中国象棋单机版源码
2021/06/20 Python
Python之基础函数案例详解
2021/08/30 Python
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python