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的MathML转图片的方法(示例代码)
Jun 23 Java/Android
简单总结SpringMVC拦截器的使用方法
Jun 28 Java/Android
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
Jul 01 Java/Android
Java 语言中Object 类和System 类详解
Jul 07 Java/Android
java泛型通配符详解
Jul 25 Java/Android
Java后台生成图片的完整步骤
Aug 04 Java/Android
简述Java中throw-throws异常抛出
Aug 07 Java/Android
java项目构建Gradle的使用教程
Mar 24 Java/Android
Java GUI编程菜单组件实例详解
Apr 07 Java/Android
Java详细解析==和equals的区别
Apr 07 Java/Android
一文搞懂Java中的注解和反射
Jun 21 Java/Android
Java使用HttpClient实现文件下载
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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
js实现表格筛选功能
2017/01/18 Javascript
js获取ip和地区
2017/03/10 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
js实现表格数据搜索
2020/08/09 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
关于pytorch中全连接神经网络搭建两种模式详解
2020/01/14 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
10条PHP编程习惯
2014/05/26 面试题
物流司机岗位职责
2013/12/28 职场文书
建筑专业自荐信范文
2014/01/05 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
六年级学生评语大全
2014/12/26 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android
redis protocol通信协议及使用详解
2022/07/15 Redis