zoukankan      html  css  js  c++  java
  • 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;
    	}
    
    - 测试用例
    

    - 测试结果
    

  • 相关阅读:
    Linux密码文件介绍
    MongoDB与微服务
    MongoDB应用场景及选型
    MongoDB性能诊断工具
    1.7每日进度
    《架构即未来》(3)
    《架构即未来》(2)
    论面向服务架构设计
    浅谈MVC设计模式
    《架构即未来》(1)
  • 原文地址:https://www.cnblogs.com/s1221/p/12553032.html
Copyright © 2011-2022 走看看