精华内容
下载资源
问答
  • 摘要: 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;
    }
    展开全文
  • 在对普通文本进行操作的时候,需要知道文本编码方式,不然读取出来的信息都是乱码。以下方法是转载别人,原理等过后再研究。 public static String codeString(String fileName) throws IOException{ File ...

            在对普通文本进行操作的时候,需要知道文本的编码方式,不然读取出来的信息都是乱码。以下方法是转载别人,原理等过后再研究。

    public static String codeString(String fileName) throws IOException{  
    		File file = new File(fileName);
    		String charset = "GBK";
            byte[] first3Bytes = new byte[3];
            try {
                boolean checked = false;
                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 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;
                        }
                    }
                }
                bis.close();
            } catch ( Exception e ) {
                e.printStackTrace();
            }
            return charset;
    	}  



    展开全文
  • 环境:python3.6需求:针对于打开一个文件,可以读取到文本编码方式,根据默认的文件编码方式获取文件,就不会出现乱码。针对这种需求,python中有这个方式可以很好的解决:解决策略:chardet是一个非常优秀的...

    环境:

    python3.6

    需求:

    针对于打开一个文件,可以读取到文本的编码方式,根据默认的文件编码方式来获取文件,就不会出现乱码。

    针对这种需求,python中有这个方式可以很好的解决:

    解决策略:

    chardet是一个非常优秀的编码识别模块。

    chardet 是python的第三方库,需要下载和安装。

    下载地址:

    安装事项:

    如果采用源代码安装方法,有可能会提示缺少setuptools这个模块。

    因此这里我们采用另外一种更为方便的安装方法,不论你选择哪种安装包,将它解压得到其中的文件夹【chardet】将这个文件夹复制到【python安装根目录Libsite-packages】下,确保这个位置可以被python引用到。

    如果不能被引用到请加入环境变量。【这在windows和linux下都是适用的】

    开始本文:

    因使用pycharm做python的开发工作,所以使用pycharm下载安装是个更高效的选择!!

    1.使用pycharm安装chardet第三方库。

    左上角File->Default Settings->进入Project Interpreter【工程翻译???什么鬼,Project Depend比较贴切吧】

    2.查找chardet

    注意是chardet不是charset

    安装成功

    3.开始使用chardet查看文件文本内容的编码方式

    代码:【注意,open需要指定打开模式为'b'二进制打开,并且需要'rb'或'wb'或其他组合方式,仅使用'b'模式不够】

    importchardet

    fileName= 'E:/2/采集数据_pswf12_180大0小35750_20181206.txt'currentFile= open(fileName,mode='rb')

    content=currentFile.read()print(chardet.detect(content))

    查看结果:

    编码方式为utf-8的概率为99%

    使用chardet判断编码方式后,就可以放心采用本种编码方式去去读取文本内容而不怕报错或乱码

    importchardet

    fileName= 'E:/2/采集数据_pswf12_180大0小35750_20181206.txt'

    #按照二进制只读模式 打开文件 读取并解析文本内容的编码方式

    currentFile = open(fileName,mode='rb')

    content=currentFile.read()print(chardet.detect(content))#按照编码方式为 UTF-8读取整个文本内容

    currentFile = open(fileName,encoding='utf-8')

    content=currentFile.read()print(content)#关闭文件

    currentFile.close()

    4.按行读取,更快

    importchardet

    fileName= 'E:/2/采集数据_pswf12_180大0小35750_20181206.txt'

    #按照二进制只读模式 打开文件 仅读取一行 并解析文本内容的编码方式

    currentFile = open(fileName,mode='rb')

    content=currentFile.readline()print(chardet.detect(content))#按照编码方式为 UTF-8 按行读取 整个文本内容

    currentFile = open(fileName,encoding='utf-8')

    line=currentFile.readline()whileline:print(line)

    line=currentFile.readline()#关闭文件

    currentFile.close()

    展开全文
  • 解决方式:先自动判断文件系统编码类型,然后读的时候用这个类型去读就ok了。 自动判断文件系统编码类型代码如下, 地址:http://www.cnblogs.com/java0721/archive/2012/07/21/2602963.html 转载于:...

    乱码问题的产生一般是,由字节流转字符流的时候,读文件的编码与文件的系统编码不一致造成的。

    解决方式:先自动判断文件系统编码类型,然后读的时候用这个类型去读就ok了。

    自动判断文件系统编码类型代码如下,

    地址:http://www.cnblogs.com/java0721/archive/2012/07/21/2602963.html

    转载于:https://www.cnblogs.com/xiongjinpeng/p/3806167.html

    展开全文
  • Java获取文本文件编码

    千次阅读 2018-12-18 14:46:38
    网上找过几种获取文件编码方式,发现这种方法是最准确的。 jar包下载: https://sourceforge.net/projects/cpdetector/?source=typ_redirect cpdetector一个可以自动检测文本编码格式的项目 detector按照“谁最先...
  • 对于Unicode,Windows支持了它的三种编码方式,一种是小尾编码(Unicode),一种是大尾编码(BigEndianUnicode),一种是UTF-8编码。 我们可以从文件的头部来区分一个文件是属于哪种编码。当头部开始的两个字节为 FF ...
  • Android识别文本编码

    2018-10-23 12:43:49
    Android识别文本编码一、使用方式Usage二、 代码解析三、参考资料 一、使用方式Usage 下载andnext_utils模块 下载地址:... CharsetUtils获取文本编码 String getCharset(@NonNull byte...
  • 文本文件转换编码

    2020-06-06 03:17:03
    如开发工具使用的是UTF-8编码(推荐使用),然后需要导入一个从其它地方获取的工程项目,但是这个工程使用了GBK编码方式。这就导致了一个常见的问题——乱码。 虽然这里的代码是不影响,但是中文注释全部都乱码了,...
  • 在使用requests.get(url).text获取文本后,将文本写入通过open(uri,'w+')打开的文件后,修改文件名后缀为html,打开后所有字符乱码,查阅资料后是因为编码问题,win中的txt默认为ANSI(选择另存为可查看),而从...
  • C# 获取文件编码

    2019-04-05 22:04:00
    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks;... /// 用于取得一个文本文件的编码方式(Encoding)。 ...
  •  针对于打开一个文件,可以读取到文本编码方式,根据默认的文件编码方式获取文件,就不会出现乱码。  针对这种需求,python中有这个方式可以很好的解决: 解决策略:  chardet是一个非常优秀的编码识别...
  • 今天这个问题在平常很少会遇见,一般都是把网页的编码设计成统一的“UTF-8”或者“GBK”就可以,因为他们基本上包含了人们所要用到的所有字符编码。但是通过今天的学习,我不仅仅是把问题给解决了,同时也对GET和...
  • ◆◆◆ 序 词向量是一种把词处理成向量的技术,并且...这种方式是随意确定的,且对于获取词之间可能存在的关系并没有提供有用的信息。词向量是NLP领域的一个替代方案。它把词或短语映射成实数向量,把特征从词汇表...
  • 这种方式是随意确定的,且对于获取词之间可能存在的关系并没有提供有用的信息。词向量是NLP领域的一个替代方案。它把词或短语映射成实数向量,把特征从词汇表大小的高维度空间降低到一个相对低的维度空间。 例如,...
  • GitHub Flavored Markdown 今天研究了一天Markdown移动端和pc端统一实现方式,由于以前有搞过移动端富文本编辑器,搞Markdown简单多了; 其中GFM的表情语法不错,比如笑脸
  • 本文介绍如何获取文本文件的编码格式,如果用c#转换编码格式,如何获取图片文件的类型(不是以文件扩展名来判断),获取音视频文件的基本信息。 文件的字符集在Windows下有两种,一种是ANSI,一种Unicode。 对于...
  • 本文转自: 慧都控件网... Public Function GetCode(CodeBase, Url) '第一个参数是设置编码方式(GB2312或UTF-8)第二个参数是地址.Dim xmlHTTP1Set xmlHTTP1 = CreateObject("Microsoft.XMLHTTP")xmlHTT...
  • 本工程旨在演示如何将Extjs 中TextArea与KindEditor绑定并且如何使用Servlet获取到该文本编辑域的值。...本工程编码方式:UTF-8; 说明:本工程中的KindEditor是“轻量级”的——去掉了上传图片的功能。
  • 如题,先读取一个文本文件判断编码(Unicode ANSI),就这两种编码然后将txt导入到excel表中,最后处理完成,再创建一个相同编码,不同文件名的txt文件,把新数据放进去Sub test()TxtPath = "D:\2.txt"'导入excel,执行读取...
  • 如题,先读取一个文本文件判断编码(Unicode ANSI),就这两种编码然后将txt导入到excel表中,最后处理完成,再创建一个相同编码,不同文件名的txt文件,把新数据放进去 Sub test() TxtPath = "D:\2.txt" '导入excel,执行...
  • 1、如果文本不是中文的话,不需要编码 mport hashlib #导入hash库函数 md5_object = hashlib.md5() #创建一个MD5对象 md5_object.update(b'123456abc') #添加去要加密的文本 md5_result = md5_object.hexdigest() #...
  • 1,Windows+R启动:运行 2,输入:cmd 回车打开! 3,输入python(假设你已经安装过了python) 里面还会出现版本号!... #coding=utf-8 #编码方式! import re def get_word_frequencies(file_name): ...
  • 处理文本读取,首先要确定文件的编码方式,然后通过指定encoding类别的方式读取文件,遇到无法解析的字符,可以通过指定未识别字符的处理方式处理。1.识别文件编码通过chardet 返回文件的编码类型,未识别的类型返回...
  • 网页文本提取器

    热门讨论 2012-11-12 21:58:39
    提供多种查找、获取信息的方式: 提取文件中全部email邮件地址 提取文件中全部互联网址(无参数) 提取文件中全部互联网址(带参数) 提取HTML文件中body的文本内容 提取HTML文件中title与body的文本内容
  • 处理文本读取,首先要确定文件的编码方式,然后通过指定encoding类别的方式读取文件,遇到无法解析的字符,可以通过指定未识别字符的处理方式处理。 1.识别文件编码 通过chardet 返回文件的编码类型,未识别的类型...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 447
精华内容 178
关键字:

编码方式获取文本