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 相关文章推荐
手把手教你用SpringBoot将文件打包成zip存放或导出
Jun 11 Java/Android
启动Tomcat时出现大量乱码的解决方法
Jun 21 Java/Android
新手初学Java网络编程
Jul 07 Java/Android
java固定大小队列的几种实现方式详解
Jul 15 Java/Android
SpringBoot快速入门详解
Jul 21 Java/Android
Springboot如何同时装配两个相同类型数据库
Nov 17 Java/Android
关于Spring配置文件加载方式变化引发的异常详解
Jan 18 Java/Android
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
Jan 18 Java/Android
Netty分布式客户端接入流程初始化源码分析
Mar 25 Java/Android
Android开发实现极为简单的QQ登录页面
Apr 24 Java/Android
Jmerte 分布式压测及分布式压测配置
Apr 30 Java/Android
详解Spring Bean的配置方式与实例化
Jun 10 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自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
深入理解node.js http模块
2018/01/24 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
vue如何判断dom的class
2018/04/26 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
通过实例解析js简易模块加载器
2019/06/17 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Python数组条件过滤filter函数使用示例
2014/07/22 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
python 负数取模运算实例
2020/06/03 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
优秀志愿者事迹材料
2014/02/03 职场文书
《新型玻璃》教学反思
2014/04/13 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
单位实习介绍信
2015/05/05 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python