`
Beaver's
  • 浏览: 394607 次
  • 性别: Icon_minigender_2
  • 来自: 天津
社区版块
存档分类
最新评论

JAVA 读取文件出现乱码的解决方案

    博客分类:
  • java
阅读更多
今天在解析一个文本文件的时候出现了乱码,以前从未遇到,花了点时间上网解决了,在此总结一下: 
首先,先看一下解析的代码: 

public List<String> readLog(String logName){
		List<String> picName = new ArrayList<String>();
		String fileName = "D:\\"+logName;
		BufferedReader br = null;
		File file = new File(fileName);
	    try {
	        br = new BufferedReader(new FileReader(file)); 
	        String tempString = null;
	        int line = 1;
	        // 一次读入一行,直到读入null为文件结束
	        while ((tempString = br.readLine()) != null) {
	            // 显示行号
	            System.out.println("line " + line + ": " + tempString);
	            line++;
	            String[] arr = tempString.split("\t");
	            for(int i=0;i<arr.length;i++){
	            	if(arr[i].contains(".jpg")){
	            		picName.add(arr[i]);	
	            		break;
	            	}
	            }
	        }
	        br.close();
	        return picName;
	    } catch (IOException e) {
	        e.printStackTrace();
	        return null;
	    } finally {
	        if (br != null) {
	            try {
	                br.close();
	            } catch (IOException e1) {
	            }
	        }
	    }
	
	}


这个方法很简单,就是获取文件中的一行数据,然后转换为数组,然后收集图片名,文本中包含中文。就这种情况下获取到的str是乱码,我想出现乱码肯定是字符集编码的问题,查看文件发现是Unicode编码(如何查看文件的编码呢,教你一个笨笨的办法:打开文件——另存为,然后看到最下面的编码,默认选择的就是当前文档的编码格式),问题就出现在这里。问题找到了就好解决了,修改代码为:
public List<String> readLog(String logName){
		List<String> picName = new ArrayList<String>();
		String fileName = "D:\\"+logName;
		BufferedReader br = null;
		File file = new File(fileName);
	    try {
	        br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
	        String tempString = null;
	        int line = 1;
	        // 一次读入一行,直到读入null为文件结束
	        while ((tempString = br.readLine()) != null) {
	            // 显示行号
	            System.out.println("line " + line + ": " + tempString);
	            line++;
	            String[] arr = tempString.split("\t");
	            for(int i=0;i<arr.length;i++){
	            	if(arr[i].contains(".jpg")){
	            		picName.add(arr[i]);	
	            		break;
	            	}
	            }
	        }
	        br.close();
	        return picName;
	    } catch (IOException e) {
	        e.printStackTrace();
	        return null;
	    } finally {
	        if (br != null) {
	            try {
	                br.close();
	            } catch (IOException e1) {
	            }
	        }
	    }
	
	}

使用文件流读取,转换编码为“UTF-8”,这样乱码问题就解决了。 归纳一下:文本文档有四种编码选项:ANSI、Unicode、Unicode big endian、UTF-8;默认应该是ANSI选项,就是系统的默认编码,一般是GBK,这种情况下用第一段代码解析是没有问题的,也不需要转码;其他格式就需要用第二段代码对应转码了,Unicode对应UTF-16,UTF-8就不用说了。  关于获取txt文件编码,我们可能有时候需要用程序获取,动态判断,这里给一点资料,参考参考: 
ANSI: 无格式定义
Unicode:  前两个字节为FFFE Unicode文档以0xFFFE开头
Unicode big endian: 前两字节为FEFF 
UTF-8: 前两字节为EFBB UTF-8以0xEFBBBF开头
用程序取出前几个字节并进行判断即可,具体参考链接:http://wenku.baidu.com/view/95f2165577232f60ddcca1a5.html
分享到:
评论

相关推荐

    Java读取TXT文本文件乱码解决方案.doc

    "Java读取TXT文本文件乱码解决方案" Java 读取 TXT 文本文件乱码解决方案中,主要讨论的是在 Java 中读取 TXT 文本文件时出现乱码的问题,并提供了解决方案。 首先,文章中提供了一个简单的读取 TXT 文件的代码,...

    java读取远程网页乱码解决方案

    总之,解决Java读取远程网页乱码问题的关键在于正确识别和使用网页的字符编码。通过设置请求头、使用特定的API或第三方库,以及处理响应头中的`Content-Type`信息,可以有效地避免乱码问题。同时,编写健壮的代码,...

    java读写csv文件,中文乱码问题

    2. **Java读取CSV文件**: - 使用`BufferedReader`和`InputStreamReader`组合,可以指定字符编码读取文件。例如: ```java FileInputStream fis = new FileInputStream("path_to_file.csv"); InputStreamReader ...

    Java读取中文文件出现乱码解决过程.mht

    解决Java读取中文文件出现乱码问题的步骤如下: 1. **明确文件编码**:首先需要确定文件实际采用的编码格式。这可以通过文件编辑器的属性或者使用专门的工具如Notepad++来查看。 2. **指定编码读取**:在Java中,...

    Java读取TXT文本文件乱码解决方案.pdf

    总之,Java 读取 TXT 文件乱码的解决方案在于确定文件的正确编码,并在读取时指定该编码。通过使用 `InputStreamReader` 并传递正确的编码字符串,可以有效地解决这类问题。同时,了解各种编码格式的特点以及如何...

    彻底解决JAVA读取写入 TXT中文乱码问题 源码

    要解决Java读取TXT文件中文乱码的问题,关键在于指定正确的编码方式。以下是使用`BufferedReader`和`FileReader`读取UTF-8编码的TXT文件的示例: ```java import java.io.BufferedReader; import java.io....

    java 解析csv文件例子,csv文件 中文乱码问题

    你可以尝试以下几种解决方案: 1. **确定正确的编码**:确认CSV文件的实际编码。可以使用一些工具,如Notepad++,查看或更改文件的编码。 2. **使用`CharsetDetector`**:如果不确定编码,可以使用Apache Commons ...

    Java中文乱码浅析及解决方案

    本文将深入探讨这一问题,并提供相应的解决方案。 首先,我们要理解Java编译器编码与运行环境编码的差异。Windows系统通常使用GBK或GB2312作为默认字符编码,而Linux系统倾向于使用UTF-8。如果Java程序在Windows...

    Java读取TXT文本文件乱码解决方案.docx

    Java 读取 TXT 文本文件时遇到乱码问题通常是由于编码格式不匹配导致的。在 Java 中,当读取文本文件时,默认使用的是平台的默认编码,这在处理非 ASCII 字符时可能会出现问题,尤其是当文件采用不同编码(如 UTF-16...

    Java读写xml,word,xml文件(防乱码)

    在深入探讨具体的解决方案之前,我们先来了解一下文件编码的基本概念。文件编码是指计算机用来存储和传输字符集的方法。常见的编码格式包括UTF-8、GBK、ISO-8859-1等。不同的操作系统、软件可能使用不同的默认编码...

    eclipse下properties文件中文乱码的解决方案

    ### Eclipse下Properties文件中文乱码解决方案详析 在IT开发领域,尤其是使用Eclipse作为集成开发环境(IDE)的开发者,经常会遇到一个令人头疼的问题——Properties文件中的中文字符出现乱码。这一现象不仅影响...

    java乱码解决方案

    标题:Java乱码解决方案 描述与标签:在Java开发中,字符编码问题常常导致文本显示为乱码,尤其是在处理国际化或多语言环境时更为常见。乱码解决方案主要涉及正确设置字符编码,确保数据在输入、处理和输出过程中的...

    JSP乱码解决方案

    - **编码与解码过程出错**:在读取或写入文件、数据库或请求参数时,如果编码和解码使用的字符集不同,也容易出现乱码。 - **IDE配置问题**:开发工具的编码设置不正确,可能导致源代码保存时就已经产生了乱码。 - *...

    java Web开发乱码解决方案

    本文将详细介绍Java Web开发中出现乱码的原因,并提供一系列解决方案。 #### JSP页面配置及乱码成因 在JSP页面中,`;charset=GB2312" %&gt;` 这样的声明指定了页面的内容类型以及字符集。这里的 `contentType` 属性...

    java读取DBF解决方案(可以解决javadbf.jar对DBF部分中文乱码和错行等杂症)

    在"系统DSN"中找到刚安装驱动后增加的项"Microsoft visual foxpro Driver",双击编辑出现如图2: 图2 3、java连接ODBC private String url = "jdbc:odbc:VF";//这里连接的是student数据源配置的java语句 ...

    ZipOutputStream 压缩文件以及乱码问题解决方案

    确保整个项目的资源文件都以UTF-8编码读取,避免在压缩过程中出现乱码。 总的来说,使用`ZipOutputStream`压缩文件需要注意文件名的编码问题,特别是处理包含非ASCII字符的文件名。通过指定正确的编码,我们可以...

    java文件JSP文件乱码汇总

    本文将深入探讨Java与JSP文件乱码的问题,提供一系列解决方案,确保数据正确无误地在不同平台和系统之间传递。 #### 一、统一字符集设置 **问题描述**:在项目开发中,由于Java默认使用UTF-8编码,但在实际操作中...

    Java乱码解决方案

    以下是一些关于Java乱码解决方案的关键知识点: 1. **字符编码基础**:首先要理解的是字符编码,如ASCII、GBK、UTF-8等。ASCII只支持英文字符,GBK是中国常用的扩展GBK编码,而UTF-8是通用的多字节编码,能支持全...

Global site tag (gtag.js) - Google Analytics