//使用 jchardet 获得文件编码 -javacode

//当含中文的文件用ANSI编码保存时,检测还是出错。

package org.mozilla.intl.chardet;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

/**

* 借助JCharDet获取文件字符集

*

* @author icer PS: JCharDet 是mozilla自动字符集探测算法代码的java移植,其官方主页为:

* http://jchardet.sourceforge.net/

* @date 2008/11/13

*/

public class FileCharsetDetector {

private boolean found = false;

/**

* 如果完全匹配某个字符集检测算法, 则该属性保存该字符集的名称. 否则(如二进制文件)其值就为默认值 null, 这时应当查询属性

*/

private String encoding = null;

//public static void main(String[] argv) throws Exception {

//if (argv.length != 1 && argv.length != 2) {

//

//System.out.println("Usage: FileCharsetDetector []");

//

//System.out.println("");

//System.out.println("Where is d:/demo.txt");

//System.out.println("For optional . Use following...");

//System.out.println(" 1 => Japanese");

//System.out.println(" 2 => Chinese");

//System.out.println(" 3 => Simplified Chinese");

//System.out.println(" 4 => Traditional Chinese");

//System.out.println(" 5 => Korean");

//System.out.println(" 6 => Dont know (default)");

//

//return;

//} else {

//String encoding = null;

//if (argv.length == 2) {

//encoding = new FileCharsetDetector().guestFileEncoding(argv[0], Integer.valueOf(argv[1]));

//} else {

//encoding = new FileCharsetDetector().guestFileEncoding(argv[0]);

//}

//System.out.println("文件编码:" + encoding);

//}

//}

/** added by bruce Yang on 2012.04.16.00.44~ */

public static void main(String[] args) throws Exception {

List pathList = new ArrayList();

pathList.add("/Users/user/Novels/txt/猎头.txt");

pathList.add("/Users/user/Novels/txt/2哥小说集合/邪神传说5.txt.txt");

pathList.add("/Users/user/Novels/txt/2哥小说集合/福尔摩斯侦探小说全集(中).txt");

pathList.add("/Users/user/Novels/txt/2哥小说集合/长生界0.txt.txt");

pathList.add("/Users/user/Downloads/开源框架/cocos2d-x/cocos2d-1.0.1-x-0.11.0/licenses/LICENSE_artwork.txt");

for(String path : pathList) {

String encoding = new FileCharsetDetector().guestFileEncoding(path);

System.out.println("文件编码:" + encoding);

}

}

/**

* 传入一个文件(File)对象,检查文件编码

*

* @param file

* File对象实例

* @return 文件编码,若无,则返回null

* @throws FileNotFoundException

* @throws IOException

*/

public String guestFileEncoding(File file) throws FileNotFoundException,

IOException {

return guestFileEncoding(file, new nsDetector());

}

/**

* 获取文件的编码

*

* @param file

* File对象实例

* @param languageHint

* 语言提示区域代码 eg:1 : Japanese; 2 : Chinese; 3 : Simplified Chinese;

* 4 : Traditional Chinese; 5 : Korean; 6 : Dont know (default)

* @return 文件编码,eg:UTF-8,GBK,GB2312形式,若无,则返回null

* @throws FileNotFoundException

* @throws IOException

*/

public String guestFileEncoding(File file, int languageHint)

throws FileNotFoundException, IOException {

return guestFileEncoding(file, new nsDetector(languageHint));

}

/**

* 获取文件的编码

*

* @param path

* 文件路径

* @return 文件编码,eg:UTF-8,GBK,GB2312形式,若无,则返回null

* @throws FileNotFoundException

* @throws IOException

*/

public String guestFileEncoding(String path) throws FileNotFoundException,

IOException {

return guestFileEncoding(new File(path));

}

/**

* 获取文件的编码

*

* @param path

* 文件路径

* @param languageHint

* 语言提示区域代码 eg:1 : Japanese; 2 : Chinese; 3 : Simplified Chinese;

* 4 : Traditional Chinese; 5 : Korean; 6 : Dont know (default)

* @return

* @throws FileNotFoundException

* @throws IOException

*/

public String guestFileEncoding(String path, int languageHint)

throws FileNotFoundException, IOException {

return guestFileEncoding(new File(path), languageHint);

}

/**

* 获取文件的编码

*

* @param file

* @param det

* @return

* @throws FileNotFoundException

* @throws IOException

*/

private String guestFileEncoding(File file, nsDetector det)

throws FileNotFoundException, IOException {

// Set an observer...

// The Notify() will be called when a matching charset is found.

det.Init(new nsICharsetDetectionObserver() {

public void Notify(String charset) {

found = true;

encoding = charset;

}

});

BufferedInputStream imp = new BufferedInputStream(new FileInputStream(

file));

byte[] buf = new byte[1024];

int len;

boolean done = false;

boolean isAscii = true;

while ((len = imp.read(buf, 0, buf.length)) != -1) {

// Check if the stream is only ascii.

if (isAscii)

isAscii = det.isAscii(buf, len);

// DoIt if non-ascii and not done yet.

if (!isAscii && !done)

done = det.DoIt(buf, len, false);

}

det.DataEnd();

if (isAscii) {

encoding = "ASCII";

found = true;

}

if (!found) {

String prob[] = det.getProbableCharsets();

if (prob.length > 0) {

// 在没有发现情况下,则取第一个可能的编码

encoding = prob[0];

} else {

return null;

}

}

return encoding;

}

}

java jchardet_使用 jchardet 获得文件编码 -javacode相关推荐

  1. java 使用mediainfo_音视频文件编码分析软件MediaInfo使用简介

    MediaInfo用来分析视频和音频文件的编码和属性内容信息,是一款是自由软件 (免费使用.免费获得源代码).他除了提供DLL之外,本身也提供GUI工具用于查看视频信息.新版本的MediaInfo还支 ...

  2. 【转载】Java文件编码自动转换工具类

    本篇随笔主要介绍了一个用java语言写的将一个文件编码转换为另一个编码并不改变文件内容的工具类: 通过读取源文件内容,用URLEncoding重新编码解码的方式实现. 1 public class C ...

  3. java文件file字符集_获取文件字符集(或文件编码) 的工具类

    packageorg.mozilla.intl.chardet; importjava.io.BufferedInputStream; importjava.io.File; importjava.i ...

  4. java获取文件编码_java如何获取文件编码格式

    1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...

  5. java获取文件编码

    目录 1. 概述 2. 编码基本知识 2.1. iso8859-1 2.2. GB2312/GBK 2.3. unicode 2.4. UTF 3.JAVA中移位运算>> , <&l ...

  6. Java的知识点28——文件编码、IO流的实例

    文件编码  字符 -->字节  (编码 encode)           字节 --> 字符(解码 decode) 节点流  处理流 package cn.dym;import java ...

  7. 使用java进行文件编码转换

    在开发过程中,可能会遇到文件编码的转换,尽管说开发工具eclipse能够转换编码,可是有的情况却非常不方便.比方,原来文件本身的编码是GBK,如今要转换成UTF-8,假设直接在eclipse中把文件编 ...

  8. java文件传输之文件编码和File类的使用

    ---恢复内容开始--- 我们知道,在用户端和服务端之间存在一个数据传输的问题,例如下载个电影.上传个照片.发一条讯息.在这里我们 就说一下文件的传输. 1.文件编码 相信大家小时候玩过积木(没玩过也 ...

  9. JAVA文件编码转换:gbk转utf-8

    JAVA文件编码转换 Android项目从eclipse迁移至Android Studio,遇到了编码问题,本来想偷懒找个工具,奈何百度大法没练好,索性就自己写了2333 说明:将gbk编码的.jav ...

最新文章

  1. [JVM-翻译]揭开java.lang.OutOfMemoryError面纱之一
  2. JSP中 JSTL和EL标签的使用
  3. AlarmManager与PendingIntent的联合使用(一)
  4. 信息系统项目管理师项目变更管理
  5. 【动态规划】石子合并 (ssl 2863)
  6. jquery中ajax完整例子get,jq的ajax方法,jquery中ajax完整例子
  7. 一统江湖的大前端(1)——PPT制作库impress.js(含附件)
  8. Java实现将二进制文件显示为图片(SU中的ximage)
  9. 苹果 AirPods 只能是 iPhone 的配件吗?
  10. rpm软件包管理的详细解读
  11. 针对低网速的性能优化
  12. 【matlab】解决每次打开.m文件都会弹出新窗口
  13. 人工智能原理知识点对照
  14. 中金:基金投顾试点扩容,买方时代已至
  15. 最新软件设计师考试大纲
  16. 毕业设计不要再做 XX 管理系统了
  17. 个人计算机键盘上的按键击键声音小,电脑键盘按键会双击怎么办
  18. 【WEB 工具汇总】
  19. webrtc入门:14.pion webrtc中Data Channels示例
  20. 音频文件格式转化,librosa库支持的语音文件类型

热门文章

  1. 服务器装win10系统文档,给云服务器装win10
  2. Windows区分正版与盗版
  3. python/多进程笔记以及一些理解
  4. 网络运维中的一些毁三观的事
  5. Win11系统待机时总是蓝屏重启无效怎么解决?
  6. OS·04docker安装
  7. 在网站插入优酷播放器的方法
  8. RHEL 6.9 官方下载地址
  9. 蓝桥杯STM32G431学习记录9——基本定时器CubeMX配置及使用
  10. docker安装flarum步骤记录