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框架入门之简单介绍SpringBoot框架
Jun 18 Java/Android
浅谈什么是SpringBoot异常处理自动配置的原理
Jun 21 Java/Android
如何解决springcloud feign 首次调用100%失败的问题
Jun 23 Java/Android
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
Jun 26 Java/Android
详细了解java监听器和过滤器
Jul 09 Java/Android
SpringBoot SpringEL表达式的使用
Jul 25 Java/Android
Java获取e.printStackTrace()打印的信息方式
Aug 07 Java/Android
Java设计模式之享元模式示例详解
Mar 03 Java/Android
Java由浅入深通关抽象类与接口(上篇)
Apr 26 Java/Android
Java中Dijkstra(迪杰斯特拉)算法
May 20 Java/Android
SpringBoot使用AOP实现统计全局接口访问次数详解
Jun 16 Java/Android
OpenFeign实现远程调用
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
php4的session功能评述(一)
2006/10/09 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
微信支付的开发流程详解
2016/09/13 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
canvas绘制七巧板
2017/02/03 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
Python进程间通信之共享内存详解
2017/10/30 Python
python实现字符串和字典的转换
2018/09/29 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
Timex手表官网:美国运动休闲手表品牌
2017/01/28 全球购物
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
自荐书4要点
2014/01/25 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
项目合作协议书范本
2014/04/16 职场文书
演讲稿格式
2014/04/30 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
质量负责人岗位职责
2015/02/15 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书