IO流读写文件中文乱码的解决

  • 问题描述

    在使用 Java 读写文件的过程中,当涉及到中文字符,会出现乱码的问题,读取内容与预期结果不符。

  • 问题分析

    所有的文件都是有编码格式的,其中 txt 和 Java 文件一般有三种编码格式:ISO8859-1、GSK 和 UTF-8.

    其中 ISO8859-1 是西欧编码,不适用中文汉字;GSK 和 UTF-8 适用于中文。Windows 10下默认的编码格式是 UTF-8.

    基于此,使用不同的编码格式读写文件,就会产生乱码。例如,eclipse 下默认的编码格式为 GBK,直接使用字符流读取会产生如下乱码。

    • 代码部分
        /**
	 * 缓冲字符流读文件
	 * @param inPath
	 * @return
	 * @throws Exception
	 */
	public static String testBufferedReader(String inPath) throws Exception {
		BufferedReader bi = new BufferedReader(new FileReader(inPath));
		StringBuffer sbr = new StringBuffer();
		String s = null;

		while((s = bi.readLine()) != null) {
			sbr.append(s);
		}
		s = sbr.toString();
		bi.close();
		
		return s;
	}
- 测试用例

- 测试结果

  • 解决方案

    使用转换流 InputStreamReader 和 OutputStreamWriter 按指定字符集解码文件,可解决这一问题。

    • 代码部分
        /**
	 * 缓冲字符流读文件
	 * @param inPath
	 * @return
	 * @throws Exception
	 */
	public static String testBufferedReader(String inPath) throws Exception {
		BufferedReader bi = new BufferedReader(new InputStreamReader(new FileInputStream(inPath), "UTF-8"));
		StringBuffer sbr = new StringBuffer();
		String s = null;

		while((s = bi.readLine()) != null) {
			sbr.append(s);
		}
		s = sbr.toString();
		bi.close();
		
		return s;
	}
- 测试用例

- 测试结果

posted @ 2020-03-23 16:35  _smallpotato  阅读(6078)  评论(0编辑  收藏  举报