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

java自动识别网站 文件的编码

阅读更多

 

通过文件流操作某个文件的时候,经常得到的是一堆乱码(中文乱码),如下面的一段代码运行后出现乱码,见图1 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class CsvDemo {

	public static void readFile(String file, String code) {

		BufferedReader fr;
		try {
			String myCode = code!=null&&!"".equals(code) ? code : "UTF8";
			InputStreamReader read = new InputStreamReader(new FileInputStream(
					file), myCode);

			fr = new BufferedReader(read);
			String line = null;
			int flag=1;
			// 读取每一行,如果结束了,line会为空
			while ((line = fr.readLine()) != null && line.trim().length() > 0) {
				if(flag==1) {
				    line=line.substring(1);//去掉文件头
				    flag++;
			    }
				// 每一行创建一个Student对象,并存入数组中
				System.out.println(line);
			}
			fr.close();
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String file = "E:/5bb.312.1363@@.csv";
		String file1 = "E:/MODELF-F0000_1.csv";
		
		readFile(file, "GB2312");
//		readFile(file1, file1Code);
		
//		readFile(file, "GB2312");
		  
//		System.out.println(BytesEncodingDetect.nicename[s.detectEncoding(new File(file1))]); 
//		System.out.println(BytesEncodingDetect.nicename[s.detectEncoding(new File(file))]);
	}

}

 

图1

 

原因: 字符集编码指定有误

 

难题: 怎样让程序自动识别文件的编码呢?如果知道了文件的编码,则动态的传递到程序中去,达到正确识别文件的目的

 

解决: 从网络上搜索到这样一个类“BytesEncodingDetect.java”(在附件中),可以达到目的。

下面是经调试后的源程序代码及正确识别文件后的截图 图2

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class CsvDemo {

	public static void readFile(String file, String code) {

		BufferedReader fr;
		try {
			String myCode = code!=null&&!"".equals(code) ? code : "UTF8";
			InputStreamReader read = new InputStreamReader(new FileInputStream(
					file), myCode);

			fr = new BufferedReader(read);
			String line = null;
			int flag=1;
			// 读取每一行,如果结束了,line会为空
			while ((line = fr.readLine()) != null && line.trim().length() > 0) {
				if(flag==1) {
				    line=line.substring(1);//去掉文件头
				    flag++;
			    }
				// 每一行创建一个Student对象,并存入数组中
				System.out.println(line);
			}
			fr.close();
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BytesEncodingDetect s = new BytesEncodingDetect(); 
		
		String file = "E:/5bb.312.1363@@.csv";
		String file1 = "E:/MODELF-F0000_1.csv";
		//得到文件的编码
		String fileCode = BytesEncodingDetect.nicename[s.detectEncoding(new File(file))];
		String file1Code = BytesEncodingDetect.nicename[s.detectEncoding(new File(file1))];
		readFile(file, fileCode);
//		readFile(file1, file1Code);
		
//		readFile(file, "GB2312");
		  
//		System.out.println(BytesEncodingDetect.nicename[s.detectEncoding(new File(file1))]); 
//		System.out.println(BytesEncodingDetect.nicename[s.detectEncoding(new File(file))]);
	}

}

 图2



 

 

BytesEncodingDetect.java该类的其他用法,还有

BytesEncodingDetect s = new BytesEncodingDetect();   
    String str = "??¤¤¤å";   
    System.out.println(BytesEncodingDetect.nicename[s.detectEncoding(str.getBytes("ISO-8859-1"))]);   
    System.out.println(new String(str.getBytes("ISO-8859-1"), "BIG5"));   
    System.out.println(BytesEncodingDetect.nicename[s.detectEncoding("Java世纪网".getBytes())]);   
    System.out.println(BytesEncodingDetect.nicename[s.detectEncoding(new URL("http://www.java2000.net"))]);   

 

 

类文件BytesEncodingDetect.java和测试代码见附件

 

  • 大小: 19.4 KB
  • 大小: 19.6 KB
分享到:
评论
2 楼 windFeng 2010-09-19  
lxinfor08 写道
还有类文件没提供啊,大哥!

附件里共3个文件
两个java文件,一个csv文件
CsvDemo.java是测试文件,另一个就是类文件

这里提供的不是整个工程,需要自己建立工程,将上面java文件的导入
1 楼 lxinfor08 2010-09-17  
还有类文件没提供啊,大哥!

相关推荐

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

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

    Java自动识别文件字符编码工具类.rar

    Java自动识别文件字符编码工具类 参考博客 https://blog.csdn.net/superbeyone/article/details/103036914 使用方式: String encode = EncodingDetect.getFileEncode(geoJsonFile); log.info("系统检测到文件[ {}...

    Java 自动识别编码

    然而,Java标准库并没有提供一种直接的自动检测文件编码的方法。通常,开发者需要借助第三方库或者自定义算法来实现这个功能。 这篇名为“BytesEncodingDetect.java”的文件很可能包含了一个自定义的编码检测算法。...

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

    接下来,我们讨论读取CSV文件,特别是自动识别文件编码。在Java中,`java.nio.charset.Charset`类用于表示字符编码,但默认情况下,Java文件读取操作通常假设文件为UTF-8编码。对于其他编码,我们需要借助第三方库如...

    JAVA自动获取文件的编码工具类

    - **错误处理**:当无法识别文件编码时,工具类应提供适当的错误处理机制,比如返回默认编码或抛出异常,以便调用者能够处理这种情况。 - **性能优化**:虽然检测文件编码有助于保证正确性,但可能会增加程序的运行...

    java 文件编码转换

    首先,`chardet.jar`可能是一个字符集检测库,用于自动识别文件的原始编码。在处理未知编码的文件时,这样的工具非常有用。Chardet(字符集检测)通常是基于统计模型来判断文件最有可能采用的编码方式。例如,它可以...

    java 获取文件编码

    在Java中,`java.nio.charset`包提供了一系列类用于处理和识别文件编码。最常用的类是`Charset`,它表示一种字符集,可以用来检测和转换文件的编码。例如,我们可以使用`Charset.defaultCharset()`获取系统默认的...

    cpdetector_1.0.10自动识别网页文件编码

    【标题】"cpdetector_1.0.10自动识别网页文件编码" 是一个软件工具,主要用于检测和识别网页文件的字符编码。这个版本是1.0.10,表明这是一个经过多次迭代优化的成熟软件。 【描述】"cpdetector自动识别网页文件...

    java获取自动文件编码1

    java 取文件的编码格式 例如UTF-8,GBK,UTF-16,GB2312等等 java 取文件的编码格式 例如UTF-8,GBK,UTF-16,GB2312等等 java 取文件的编码格式 例如UTF-8,GBK,UTF-16,GB2312等等

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

    这两个库都可以帮助我们自动识别文件的编码,并检查是否存在BOM。 1. **chardet库**: `chardet`库是基于Java的字符集检测工具,它可以分析字节序列并猜测其对应的字符编码。要使用`chardet`,你需要先将其导入到...

    java自动获取文件的编码

    例如,Apache Tika库可以分析多种类型的文件内容,包括文本、图片等,自动识别出其内部的字符编码。 4. **逐步尝试**:如果以上方法都无法确定,可以按照常见编码的优先级顺序依次尝试解码,看哪个解码结果最合理。...

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

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

    java判断文件编码

    总之,Java提供了一些库和工具来帮助开发者识别文件的编码,通过引入`cpdetector`和`chardet`库,结合`FileCharsetDetector.java`中的方法,可以有效地解决文件编码的判断问题。理解这些工具的工作原理,以及如何在...

    Java字符编码及获取文件编码

    例如,`java.nio.charset.Charset`类提供了识别字符集的功能,但不能自动检测文件编码。通常,我们需要读取文件的前几个字节,然后基于这些字节的特定模式(如BOM,Byte Order Mark)来猜测编码。 Apache Commons ...

    批量编码转化工具(实现文件编码的自动检测)

    文件编码是用来表示文本字符的规则,常见的有ASCII、GB2312、GBK、UTF-8等。不同的编码方式决定了字符集的大小和覆盖的字符范围。例如,ASCII只包含英文字符,而GBK则包含了更多的中文字符。UTF-8是一种多字节编码...

    editminus 开源编辑器,自动识别编码

    在编程领域,正确识别文件编码至关重要,因为它直接影响到文本的显示和处理,尤其是在处理多语言或者非ASCII字符时。`editminus`通过其强大的编码识别能力,确保了用户在打开任何类型的文本文件时都能获得准确无误的...

    图文识别_java图文识别_java文字识别_

    Java在处理图文识别时,不仅可以识别文字,还可以处理图像中的其他元素,如图表、符号等,这在数据分析、文档自动化等领域非常有用。 总结来说,Java提供了强大的工具和库,使得开发人员能够轻松实现图文识别和文字...

    解析URL和文件的编码方式

    在处理未知编码的文件时,可能需要使用一些库来自动检测文件的编码,例如ICU4J库提供了`BreakIterator`和`CharsetDetector`类,能够帮助识别文件的编码格式。 了解和熟练掌握URL和文件的编码方式对于开发跨平台、跨...

    字符编码 自动识别 编码类型

    此外,"charopen.bat"和"chartypeall.bat"可能是批处理脚本,它们可能封装了一些常用的操作,如批量检测文件编码或一次性打开多个文件。这些批处理文件可以大大提高工作效率,特别是在处理大量文本文件时。 在处理...

Global site tag (gtag.js) - Google Analytics