欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java自动识别网站 文件的编码 博客分类: 编程应用 Java.net 

程序员文章站 2024-03-23 23:20:40
...

 

通过文件流操作某个文件的时候,经常得到的是一堆乱码(中文乱码),如下面的一段代码运行后出现乱码,见图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
java自动识别网站 文件的编码
            
    
    博客分类: 编程应用 Java.net 
 

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

 

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

 

解决: 从网络上搜索到这样一个类“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


java自动识别网站 文件的编码
            
    
    博客分类: 编程应用 Java.net 
 

 

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和测试代码见附件

 

  • java自动识别网站 文件的编码
            
    
    博客分类: 编程应用 Java.net 
  • 大小: 19.4 KB
  • java自动识别网站 文件的编码
            
    
    博客分类: 编程应用 Java.net 
  • 大小: 19.6 KB
相关标签: Java .net