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;
    	}
    
    - 测试用例
    

    - 测试结果
    

  • 相关阅读:
    JS防Yahoo的选项卡导航特效
    纯CSS制作简洁带提示的导航
    绿色简单的CSS下拉菜单
    JS+CSS防FLASH效果竖向可折叠的滑动菜单
    鼠标划过快速展开的JS下拉菜单
    ASP.NET页面生命周期(转载)
    JS Eval函数作用(转载)
    Html十个不常用的标签(转载)
    CSS定位学习
    FireBug调试器相关(转载)
  • 原文地址:https://www.cnblogs.com/s1221/p/12553032.html
Copyright © 2011-2022 走看看