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异步之call future
Jun 14 Java/Android
如何解决springcloud feign 首次调用100%失败的问题
Jun 23 Java/Android
spring项目中切面及AOP的使用方法
Jun 26 Java/Android
SpringBoot实现异步事件驱动的方法
Jun 28 Java/Android
Springboot如何同时装配两个相同类型数据库
Nov 17 Java/Android
Java中try catch处理异常示例
Dec 06 Java/Android
java objectUtils 使用可能会出现的问题
Feb 28 Java/Android
Java Spring Boot 正确读取配置文件中的属性的值
Apr 20 Java/Android
Android Studio实现带三角函数对数运算功能的高级计算器
May 20 Java/Android
Spring Cloud OAuth2实现自定义token返回格式
Jun 25 Java/Android
Spring中bean集合注入的方法详解
Jul 07 Java/Android
SpringBoot Http远程调用的方法
Aug 14 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
php中ob函数缓冲机制深入理解
2015/08/03 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
thinkPHP5框架中widget的功能与用法详解
2018/06/11 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
javascript如何实现create方法
2019/11/04 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
python中zip()方法应用实例分析
2016/04/16 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
Python读写Excel表格的方法
2021/03/02 Python
HTML5 canvas基本绘图之绘制五角星
2016/06/27 HTML / CSS
新员工培训个人的自我评价
2013/10/09 职场文书
毕业实习个人鉴定范文
2013/12/10 职场文书
金融事务专业求职信
2014/04/25 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
初二学生评语大全
2014/12/26 职场文书
护理专业自我评价
2015/03/11 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL