`
h416756139
  • 浏览: 365632 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 判断文件的编码

    博客分类:
  • java
阅读更多

 首先,不同编码的文本,是根据文本的前两个字节来定义其编码格式的。定义如下:


  ANSI:        无格式定义;

  Unicode:       前两个字节为FFFE;

  Unicode big endian: 前两字节为FEFF;  

  UTF-8:        前两字节为EFBB; 


  知道了各种编码格式的区别,写代码就容易了.


public static String get_charset( File file ) {   

        String charset = "GBK";   

        byte[] first3Bytes = new byte[3];   

        try {   

            boolean;   

            BufferedInputStream bis = new BufferedInputStream( new FileInputStream( file ) );   

            bis.mark( 0 );   

            int read = bis.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;   

            }   

            bis.reset();   

            if ( !checked ) {   

            //    int len = 0;   

                int loc = 0;   

  

                while ( (read = bis.read()) != -1 ) {   

                    loc++;   

                    if ( read >= 0xF0 ) break;   

                    if ( 0x80 <= read && read <= 0xBF ) // 单独出现BF以下的,也算是GBK   

                    break;   

                    if ( 0xC0 <= read && read <= 0xDF ) {   

                        read = bis.read();   

                        if ( 0x80 <= read && read <= 0xBF ) // 双字节 (0xC0 - 0xDF) (0x80   

                                                                        // - 0xBF),也可能在GB编码内   

                        continue;   

                        else break;   

                    }   

                    else if ( 0xE0 <= read && read <= 0xEF ) {// 也有可能出错,但是几率较小   

                        read = bis.read();   

                        if ( 0x80 <= read && read <= 0xBF ) {   

                            read = bis.read();   

                            if ( 0x80 <= read && read <= 0xBF ) {   

                                charset = "UTF-8";   

                                break;   

                            }   

                            else break;   

                        }   

                        else break;   

                    }   

                }   

                //System.out.println( loc + " " + Integer.toHexString( read ) );   

            }   

  

            bis.close();   

        } catch ( Exception e ) {   

            e.printStackTrace();   

        }   

  

        return charset;   

    }   

    分享到:
    评论

    相关推荐

      Java判断文件编码格式 - 明明是悟空 - 博客园1

      在Java编程中,判断文件编码格式是一项常见的任务,特别是在处理包含多国语言或者用户自定义内容的文件时。本文将探讨如何使用Java进行文件编码格式的识别,主要介绍两种方法:一种是简单的UTF-8判断,另一种是使用...

      Java判断文件的编码

      ### Java判断文件编码的方法 在Java开发中,经常会遇到需要处理不同编码格式的文件的情况。为了确保程序能够正确解析文件内容,必须先判断文件的编码格式。本文将详细介绍如何使用Java来判断文件是否为UTF-8或GBK...

      java判断文件编码

      在Java编程中,判断文件编码是一项重要的任务,尤其是在处理用户上传的文件或处理不同系统间的文件传输时。本文将深入探讨如何使用Java进行文件编码的检测,并基于提供的资源——`cpdetector_1.0.5.jar`、`chardet....

      java判断文件编码格式 三方工具包 cpdetector_1.0.10.jar

      总的来说,`cpdetector_1.0.10.jar`是Java开发中的一个实用工具,它提供了高效且准确的文件编码检测功能,帮助开发者更好地处理文本数据,避免因编码问题而引发的程序异常。通过理解并熟练使用这类工具,可以提升...

      java判断文件编码或文本流编码的方法宣贯.pdf

      以下将详细介绍如何在Java中进行文件编码的判断。 首先,基本的判断方法是通过读取文件的前三个字节来识别编码格式。ASCII码文本通常不涉及这个问题,因为ASCII只包含128个字符,可以用单字节表示。但对于非ASCII...

      java获取文件编码(判断有无BOM)

      本文将详细介绍如何在Java中获取文件的编码并判断文件是否带有BOM。 首先,让我们了解一下什么是BOM。BOM是UTF-8、UTF-16和UTF-32等编码格式中的一个可选标记,用于告知解析器文件的编码类型。例如,UTF-8的BOM是三...

      java判断编码方式

      总之,Java中判断文件编码的方式多样,可以根据具体场景选择合适的方法。需要注意的是,这些方法都有其局限性,特别是对于没有BOM且包含混合字符集的文件,可能会比较困难。因此,最好的实践是在创建文件或数据时就...

      java程序判断文件编码的类型

      ### Java程序判断文件编码的类型 #### 知识点概览 本文档旨在教导读者如何通过Java编程语言来判断文件的编码类型。这包括常见的编码格式如GBK、UTF-8等。了解文件编码对于处理多语言环境下的文本数据至关重要。 ##...

      java文件字符编码集判断依赖.zip

      通用的文件字符编码集判断需要借助第三方包...使用Cpdetector jar包检测文件编码需要依赖antlr-2.7.7.jar、chardet-1.0.jar、jargs-1.0.jar三个jar包 本下载资源一站式全包含,并附带亲测有效的片段代码供测试~~

      java 获取文件编码

      在Java编程语言中,获取文件编码是一个常见的任务,特别是在处理文本文件时,了解正确的编码格式至关重要,因为不同的编码方式会影响字符的表示和解析。本文将深入探讨如何在Java中识别和处理不同类型的文本编码,如...

      java 文件编码转换

      标题"java 文件编码转换"指的是使用Java来解决文件编码问题,而描述中提到的"提供一个jar包和一个java文件"则暗示了我们可以通过这两个文件实现这个功能。 首先,`chardet.jar`可能是一个字符集检测库,用于自动...

      读取创建CSV文件并自动解析文件编码方式

      本文将深入探讨如何读取和创建CSV文件,并特别关注自动解析文件编码方式这一关键环节。我们将使用Java语言进行示例,同时引入第三方库来辅助处理编码问题。 首先,创建CSV文件的基本过程涉及将数据写入具有特定分隔...

      java识别文件编码格式

      在Java编程语言中,识别文件编码格式是一项重要的任务,特别是在处理不同来源的文本文件时。在没有第三方JAR包的情况下,我们通常需要依赖Java内置的API来实现这一功能。以下是一些关键知识点: 1. **字符编码**:...

      EncodingDetect.java自动获取文件的编码.rar

      EncodingDetect.java,java自动获取文件的编码,智能识别文件编码,支持本地file及指定url的编码识别,支持多达40余种编码的识别,包括最常见的UTF-8,GBK,GB2312,BIG5,UNICODE,ISO8859_1,ASCII等,FileUtil....

      Java判断文本文件编码格式以及读取

      如果很多时候我们没有约定好文件格式,我们就难以读取文件内容,此时,我们就需要一个工具来探测所读文本的编码格式,此工具可以允许用户读取诸如utf-8,gbk,gb2312一类的文件格式。内置了一些常用的探测实现类,...

      判断文件是否为utf-8的编码格式

      一个判断文件为utf-8的java类,自己用有限状态机实现的,很好用的。

      java 解析csv文件例子,csv文件 中文乱码问题

      当处理包含中文字符的CSV文件时,可能会遇到乱码问题,这通常与文件编码设置有关。本篇文章将详细探讨如何在Java中解析CSV文件,并解决中文乱码的问题。 首先,我们需要了解如何使用Java的标准库`java.io`和`java....

      antlr.jar

      Java判断文件编码

      判断上传的文件编码方式-支持各种编码方式

      判断上传的文件编码方式-支持各种编码方式,GB2312、utf-8、gbk、utf-16...

      JAVA文件编码转换和实现目录与文件打开

      在Java编程语言中,文件编码转换和文件操作是常见的任务,尤其在处理不同地区和语言的文本时。这里我们将深入探讨这两个主题。 1. **文件编码转换** - **Unicode转GB2312**: Unicode是一种国际标准字符集,包含了...

    Global site tag (gtag.js) - Google Analytics