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实践之抽象工厂模式
Jun 18 Java/Android
springboot如何初始化执行sql语句
Jun 22 Java/Android
Java elasticsearch安装以及部署教程
Jun 28 Java/Android
使用@Value值注入及配置文件组件扫描
Jul 09 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
浅谈sql_@SelectProvider及使用注意说明
Aug 04 Java/Android
Java使用JMeter进行高并发测试
Nov 23 Java/Android
SpringBoot整合minio快速入门教程(代码示例)
Apr 03 Java/Android
Java中Dijkstra(迪杰斯特拉)算法
May 20 Java/Android
解决spring.thymeleaf.cache=false不起作用的问题
Jun 10 Java/Android
springboot集成redis存对象乱码的问题及解决
Jun 16 Java/Android
java中如何截取字符串最后一位
Jul 07 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引用(&amp;)各种使用方法实例详解
2014/03/20 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
vue-axios使用详解
2017/05/10 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
python检测是文件还是目录的方法
2015/07/03 Python
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
python取代netcat过程分析
2018/02/10 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
python3.x实现发送邮件功能
2018/05/22 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
关于幼儿的自我评价
2013/12/18 职场文书
八年级音乐教学反思
2014/01/09 职场文书
护士自我鉴定怎么写
2014/02/07 职场文书
初三毕业评语
2014/12/26 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
灵能百分百第三季什么时候来?
2022/03/15 日漫
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技
SQL Server中搜索特定的对象
2022/05/25 SQL Server