精华内容
下载资源
问答
  • 主要介绍了C#实现获取文本文件的编码一个类,本文给出类可以自动区分GB2312和UTF8,并同时给出了使用方法,需要的朋友可以参考下
  • 摘要: Java判断文本文件字符编码的两种方法:1、通过文件流的前面部分字节判断;2、通过cpdetector库 提供的监听方法来判断。 Java判断文本文件字符编码的两种方法:1、通过文件流的前面部分字节判断;2、通过...
    摘要: Java判断文本文件字符编码的两种方法:1、通过文件流的前面部分字节判断;2、通过cpdetector库 提供的监听方法来判断。

    Java判断文本文件字符编码的两种方法:1、通过文件流的前面部分字节判断;2、通过cpdetector库提供的监听方法来判断。

    1、取文件流方式

        public static String codeString(String fileName) throws Exception {
            BufferedInputStream bin = new BufferedInputStream(new FileInputStream(fileName));
            int p = (bin.read() << 8) + bin.read();
            bin.close();
            String code = null;
     
            switch (p) {
            case 0xefbb:
                code = "UTF-8";
                break;
            case 0xfffe:
                code = "Unicode";
                break;
            case 0xfeff:
                code = "UTF-16BE";
                break;
            default:
                code = "GBK";
            }
     
            return code;
        }

    该方法一般情况是可以正常运行的,但对有些文件却不生效,不能获取正确的编码,故而可采取如下方法。

    2、使用cpdetector库

    使用Cpdetector jar包检测文件编码需要依赖antlr-2.7.4.jar、chardet-1.0.jar、jargs-1.0.jar三个jar包,可以到官网http://cpdetector.sourceforge.net下载 。

    详细的使用可以参考官网,简单的代码示例如下:

    	/**
    	 * <div>
    	 * 利用第三方开源包cpdetector获取文件编码格式.<br/>
    	 * --1、cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法加进来,
    	 *   如:ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector. <br/>
    	 * --2、detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则. <br/>
    	 * --3、cpDetector是基于统计学原理的,不保证完全正确.<br/>
    	 * </div>
    	 * @param filePath
    	 * @return 返回文件编码类型:GBK、UTF-8、UTF-16BE、ISO_8859_1
    	 * @throws Exception 
    	 */
    	public static String getFileCharset(String filePath) throws Exception {
    		CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
    		/*ParsingDetector可用于检查HTML、XML等文件或字符流的编码,
    		 * 构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示。
    	    */
    		detector.add(new ParsingDetector(false));
    		/*JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码测定。
    		 * 所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以再多加几个探测器,
    		 * 比如下面的ASCIIDetector、UnicodeDetector等。
            */
    		detector.add(JChardetFacade.getInstance());
    		detector.add(ASCIIDetector.getInstance());
    		detector.add(UnicodeDetector.getInstance());
    		Charset charset = null;
    		File file = new File(filePath);
    		try {
    			//charset = detector.detectCodepage(file.toURI().toURL());
    			InputStream is = new BufferedInputStream(new FileInputStream(filePath));
    			charset = detector.detectCodepage(is, 8);
    		} catch (Exception e) {
    			e.printStackTrace();
    			throw e;
    		}
    
    		String charsetName = "GBK";
    		if (charset != null) {
    			if (charset.name().equals("US-ASCII")) {
    				charsetName = "ISO_8859_1";
    			} else if (charset.name().startsWith("UTF")) {
    				charsetName = charset.name();// 例如:UTF-8,UTF-16BE.
    			}
    		}
    		return charsetName;
    	}

     ---------------------------------------------------------------------------------------------------

    我自己实现的。。。

    pom文件

    <!--解析文件的编码-->
    <dependency>
        <groupId>antlr</groupId>
        <artifactId>antlr</artifactId>
        <version>2.7.7</version>
    </dependency>
    <dependency>
        <groupId>org.mozilla.intl</groupId>
        <artifactId>chardet</artifactId>
        <version>1.0</version>
    
    </dependency>
    <dependency>
        <groupId>net.sourceforge.cpdetector</groupId>
        <artifactId>cpdetector</artifactId>
        <version>1.0.7</version>
    </dependency>
    ----------------------------------

    代码实现

    /**
     * 读取TXT文本内容
     * @param file
     */
    public static List<String> readTxtUtil(MultipartFile file) {
       List<String> list=Lists.newArrayList();
       try {
             //InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
    
             //处理文件的字符集,得到文件的字符集
              CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
              detector.add(new ParsingDetector(false));
              detector.add(JChardetFacade.getInstance());
              detector.add(ASCIIDetector.getInstance());
              detector.add(UnicodeDetector.getInstance());
              Charset charset = null;
             try {
             //charset = detector.detectCodepage(file.toURI().toURL());
             InputStream is = new BufferedInputStream(file.getInputStream());
             charset = detector.detectCodepage(is, 8);
              } catch (Exception e) {
             e.printStackTrace();
             throw e;
              }
    
              InputStreamReader isr = new InputStreamReader(file.getInputStream(), charset.name());
              // InputStreamReader isr = new InputStreamReader(file.getInputStream(), "utf-8");
             BufferedReader br = new BufferedReader(isr);
             String lineTxt = null;
    
             while ((lineTxt = br.readLine()) != null) {
                //System.out.println(lineTxt);
                list.add(lineTxt);
             }
             br.close();
       } catch (Exception e) {
          System.out.println("文件读取错误!");
       }
              return list;
    }
    展开全文
  • 本工程用于研究如何使用Java代码获取文件、文件流或字符串的编码方式 本工程编码方式:UTF-8 开发工具:MyEclipse 参考博客:http://blog.csdn.net/gaohuanjie/article/details/43735891
  • 如何使用Java代码获取文件、文件流或字符串的编码方式

            今天通过网络资源研究了一下如何使用Java代码获取文件、文件流或字符串的编码方式,现将代码与大家分享:

    package com.ghj.packageoftool;
    
    import info.monitorenter.cpdetector.io.ASCIIDetector;
    import info.monitorenter.cpdetector.io.ByteOrderMarkDetector;
    import info.monitorenter.cpdetector.io.CodepageDetectorProxy;
    import info.monitorenter.cpdetector.io.JChardetFacade;
    import info.monitorenter.cpdetector.io.ParsingDetector;
    import info.monitorenter.cpdetector.io.UnicodeDetector;
    
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.InputStream;
    import java.net.URL;
    import java.nio.charset.Charset;
    
    /**
     * 文件工具类
     * 
     * @author 高焕杰
     */
    public class FileTool {
    
    	/**
    	 * 获取本地文件的编码格式
    	 * 
    	 * @param file 要判断的文件编码格式
    	 * 
    	 * @author 高焕杰
    	 */
    	public static String getLocalFileEncode(File localFile) {
    
    		/*
    		 * cpDetector是探测器,它把探测任务交给具体的探测实现类的实例完成。
    		 * cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。
    		 * cpDetector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的字符集编码。cpDetector是基于统计学原理的,不保证完全正确。
    		 */
    		CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();
    		codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示。
    		codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
    		codepageDetector.add(new ByteOrderMarkDetector());  
    		codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII编码测定
    		codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族编码的测定
    		Charset charset = null;
    		try {
    			charset = codepageDetector.detectCodepage(localFile.toURI().toURL());
    			if (charset != null){
    				return charset.name();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    	
    	/**
    	 * 获得远程URL文件的编码格式
    	 * 
    	 * @param url 远程文件的URL路径
    	 * 
    	 * @author 高焕杰
    	 */
    	public static String getURLFileEncode(URL url) {
    
    		/*
    		 * cpDetector是探测器,它把探测任务交给具体的探测实现类的实例完成。
    		 * cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。
    		 * cpDetector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的字符集编码。cpDetector是基于统计学原理的,不保证完全正确。
    		 */
    		CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();
    		codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示。
    		codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
    		codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII编码测定
    		codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族编码的测定
    		Charset charset = null;
    		try {
    			charset = codepageDetector.detectCodepage(url);
    			if (charset != null){
    				return charset.name();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    	
    	/**
    	 * 获得文件流的编码格式
    	 * 
    	 * @param inputStream 文件流
    	 * 
    	 * @author 高焕杰
    	 */
    	public static String getInputStreamEncode(InputStream inputStream) {
    
    		/*
    		 * cpDetector是探测器,它把探测任务交给具体的探测实现类的实例完成。
    		 * cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。
    		 * cpDetector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的字符集编码。cpDetector是基于统计学原理的,不保证完全正确。
    		 */
    		CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();
    		codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示。
    		codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
    		codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII编码测定
    		codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族编码的测定
    		Charset charset = null;
    		try {
    			charset = codepageDetector.detectCodepage(inputStream, 0);
    			if (charset != null){
    				return charset.name();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    	
    	/**
    	 * 获得字符串的编码格式
    	 * 
    	 * @param stringValue 要判断的文件编码格式字符串
    	 * 
    	 * @author 高焕杰
    	 */
    	public static String getStringEncode(String stringValue) {
    
    		/*
    		 * cpDetector是探测器,它把探测任务交给具体的探测实现类的实例完成。
    		 * cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。
    		 * cpDetector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的字符集编码。cpDetector是基于统计学原理的,不保证完全正确。
    		 */
    		CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();
    		codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示。
    		codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
    		codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII编码测定
    		codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族编码的测定
    		Charset charset = null;
    		try {
    			InputStream inputStream = new ByteArrayInputStream(stringValue.getBytes());
    			charset = codepageDetector.detectCodepage(inputStream, 3);
    			if (charset != null){
    				return charset.name();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    }

            由于上面代码依赖了很多jar包,所以请直接下载使用MyEclipse开发的Demo。

            【 0分下载Demo
    展开全文
  • Java获取文本文件编码

    千次阅读 2018-12-18 14:46:38
    网上找过几种获取文件编码方式,发现这种方法是最准确的。 jar包下载: https://sourceforge.net/projects/cpdetector/?source=typ_redirect cpdetector一个可以自动检测文本编码格式的项目 detector按照“谁最先...

    网上找过几种获取文件编码的方式,发现这种方法是最准确的。

    jar包下载:
    https://sourceforge.net/projects/cpdetector/?source=typ_redirect

    cpdetector一个可以自动检测文本编码格式的项目

    detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的 字符集编码。
    使用需要用到三个第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar

    下面是代码,可以直接copy试一下便知:

    public static String getFileEncode(String filePath) {
            String charsetName = "";
            try {
                File file = new File(filePath);
                CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
                detector.add(new ParsingDetector(false));
                //添加三种编码格式
                detector.add(JChardetFacade.getInstance());
                detector.add(ASCIIDetector.getInstance());
                detector.add(UnicodeDetector.getInstance());
                java.nio.charset.Charset charset = null;
                charset = detector.detectCodepage(file.toURI().toURL());
                if (charset != null) {
                    charsetName = charset.name();
                } else {
                    charsetName = "UTF-8";
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return charsetName;
        }
    

    本文转载自https://blog.csdn.net/wuseyukui/article/details/45799207

    展开全文
  • NET中判断一个文本文件的编码方式

    千次阅读 2012-11-01 15:44:29
    对于Unicode,Windows支持了它的三种编码方式,一种是小尾编码(Unicode),一种是大尾编码(BigEndianUnicode),一种是UTF-8编码。 我们可以从文件的头部来区分一个文件是属于哪种编码。当头部开始的两个字节为 FF ...
    文件的字符集在Windows下有两种,一种是ANSI,一种Unicode。
    
    对于Unicode,Windows支持了它的三种编码方式,一种是小尾编码(Unicode),一种是大尾编码(BigEndianUnicode),一种是UTF-8编码。
    我们可以从文件的头部来区分一个文件是属于哪种编码。当头部开始的两个字节为 FF FE时,是Unicode的小尾编码;当头部的两个字节为FE FF时,是Unicode的大尾编码;当头部两个字节为EF BB时,是Unicode的UTF-8编码;当它不为这些时,则是ANSI编码。
    按照如上所说,我们可以通过读取文件头的两个字节来判断文件的编码格式,代码如下(C#代码):

    程序中System.Text.Encoding.Default是指操作系统的当前 ANSI 代码页的编码。

    Public Shared Function GetFileEncodeType(ByVal stream As Stream) As Encoding
        Dim buffer() As Byte
        Using br As New BinaryReader(stream)
            buffer = br.ReadBytes(2)
            br.Close()
        End Using
        If buffer(0) >= &HEF Then
            If buffer(0) = &HEF AndAlso buffer(1) = &HBB Then
                Return Encoding.UTF8
            ElseIf buffer(0) = &HFE AndAlso buffer(1) = &HFF Then
                Return Encoding.BigEndianUnicode
            ElseIf buffer(0) = &HFF AndAlso buffer(1) = &HFE Then
                Return Encoding.Unicode
            Else
                Return Encoding.Default
            End If
        Else
            Return Encoding.Default
        End If
    End Function


    展开全文
  • Ajax从本地文件获取文本

    千次阅读 2015-09-07 10:10:10
    今天学习了Ajax从本地文件获取文本。遇到了些问题,在网络上都找到了解决办法。 先把源码都贴上来吧。 First Ajax Script function getText(url){ var ajaxRequest = CreateRequestObject(); ...
  • 
如果你有一个文本(plaintext), 但是不知道它的编码, 那就有点困难了. 你应该避免把自己置于这种境地.  从已知编码的文件读取数据
可以使用 stringWithContentsOfFile  :encoding:erro 或者相应的init函数 ...
  • 对于Unicode,Windows支持了它的三种编码方式,一种是小尾编码(Unicode),一种是大尾编码(BigEndianUnicode),一种是UTF-8编码。 我们可以从文件的头部来区分一个文件是属于哪种编码。当头部开始的两个字节为 FF ...
  • 软件一般采用三种方式来决定文本的字符集和编码: 检测文件头标识,提示用户选择,根据一定的规则猜测 最标准的途径是检测文本最开头的几个字节,开头字节 Charset/encoding,如下表: EF BB BF UTF-8 FE FF
  • Qt写入unicode编码格式的文本

    千次阅读 2017-02-04 23:48:20
    1、文本流设置unicode小端模式 2、写入文本前两个字节FF FE 3、字符串转成unicode编码 ...//可以获取Qt支持的编码,下面列出字符串的几种编码名称 //GBK GB2312 //unicode 小端 //UTF-8 //UnicodeLitteUn
  • 这是我第一尝试发帖子,有不足指出希望大家不吝指出和理解。 文本压缩效率 亲自测试,文本压缩效率大概在60%左右...1)一个是手动输入字符串进行数据分析,然后输出字符串压缩后的二进制编码和字符串内每种类型字...
  • C# 文本编码转换

    千次阅读 2018-02-01 07:47:12
    1. C#的编码转换默认由System.Text.Encoding进行操控转换. 引用为:   using System.Text; 2. C# Encoding类自带编码有:UTF7/UTF8/UTF32/Unicode/ASCII, Encoding类有一个子类就是Default,此类会随操作环境...
  • 很多情况下我们是这样读取文本文件的: with open(r'F:\.Python Project\spidertest1\test\pdd凉席.txt', 'r') as f: text = f.read() 但是如果该文本文件是gbk格式的,那么将会报以下错误: Traceback (most ...
  • VB 按指定编码格式写入文本文件

    千次阅读 2013-01-29 12:21:21
    代码如下: 'VB 按指定编码格式写入文本文件,默认GB2312编码。 Private Sub SaveFile(FilePath As String, strText As String, Optional Charset As String = "GB2312")Dim Obj As ObjectSet Obj = ...
  • 在windows环境下,ADT 编译器默认编码方式GBK,一般设置默认为UTF-8,能更好的解决乱码问题,设置方式如下: window-preferences-workspace Java平台下不同编码方式的区别 几种常见的编码格式 为...
  • 这是一个获取文本的工具类,支持utf8,gbk等等格式的编码。对应位置编码格式的文件使用该工具类便可以获取文件工具类
  • 读取与创建CSV文件,根据第三方jar包自动解析文件编码方式,相关jar包与使用说明
  • c++ifstream写入unicode编码格式的文本

    千次阅读 2017-02-04 23:58:48
    #include #include #include #include using namespace std; #pragma comment(lib,...//编码转换,source_charset是源编码,to_charset是目标编码 std::string code_convert(char *source_charset, char *to_cha
  • Python爬虫获取网页编码格式

    千次阅读 2019-09-18 15:35:15
    网页编码格式是每个网页规定的本页面文字的编码方式,其中比较流行的是ascii, gbk, utf-8, iso等。观察许多网页的编码格式都是在meta标签的content属性中定义的。基于以上特点本文提供获取编码格式的方法。 代码如下...
  • Python读取文本常见的编码问题

    千次阅读 2018-05-02 15:17:13
    当我们刚刚开始学习处理大量的文本数据的时候,总是会在读取数据这一块出现卡壳,尤其是像我这种根本没有任何指导的小白,千里之行刚刚迈出第一步就宣告结束了,这种情况往往出现在我们自己爬取的一些网络文本,一般...
  • python 获取文件字符编码类型

    万次阅读 2017-09-01 16:31:46
    被Windows记事本的utf-8编码坑了一上午,python 按utf-8编码读取出来的内容总是有问题。最后通过程序获取文件编码类型才发现,记事本的utf-8是带BOM的!... # 二进制方式读取,获取字节数据,检测类型...
  • 用C语言检测文本编码的方法

    万次阅读 热门讨论 2012-11-01 14:49:34
    我们经常会想知道某些文本文件的编码,可是编码检测却并不是一件简单的事情,它需要对文本进行采样,统计分析后再进行字符集的匹配,不过值得庆幸的是有uchardet(https://code.google.com/p/uchardet/)这样的开源库...
  • 首先对各字符进行Huffman编码,将该文件翻译成Huffman编码文件B;然后将Huffman编码文件译码成文件C,并对原文件与文件C进行比较。 算法思想描述 需求分析 输入:文本文件(压缩文件) 输出:压缩文件(文本文件)...
  • Android判断文本编码格式

    千次阅读 2018-12-13 18:19:05
    通过查找看项目中的老代码,原因是代码中使用的是通过BOM头的判断方式来判断文本编码格式,如果没有BOM头,代码中就都识别成了GBK编码。虽然在Windows上utf-8的编码都默认添加BOM头,但是也可以使用无BOM头的UTF-8...
  • 如果很多时候我们没有约定好文件格式,我们就难以读取文件内容,此时,我们就需要一个工具来探测所读文本编码格式,此工具可以允许用户读取诸如utf-8,gbk,gb2312一类的文件格式。内置了一些常用的探测实现类,...
  • Python获取文件编码类型

    千次阅读 2018-12-21 16:59:31
    # 获取文件编码类型 def get_encoding(file): # 二进制方式读取,获取字节数据,检测类型 with open(file, 'rb') as f: data = f.read() return chardet.detect(data)['encoding'] file_name = 'AA...
  • java 怎么判断文本内容的编码格式

    千次阅读 2016-05-07 11:16:29
    java 怎么判断文本内容的编码格式
  • 获取文件编码格式与文件转码,提供几个工具方法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 210,726
精华内容 84,290
关键字:

编码方式获取文本