Java实现GBK转码到UTF-8(文件)
所以,虚无的悲叹,寻根问底仍是由于肉身的圈定。肉身蒙蔽了灵魂的眼睛,单是看见要回那无中去,却忘了你原是从那无中来。 ——史铁生 《病隙碎笔》
嗯,需求是这样的:
实习测试需要爬一点东西,我用python爬到,然后保存成JSON文件,但是开发环境是windows,所以文件保存是以GBK的编码保存的。然后我需要把JSON解析为POJO,然后给持久层。,但是Java编码环境是UTF-8,所以我想把文件转换为UTF-8,觉得应该可以GBK的方式读取,直接解析,不做处理,但是考虑控制台日志啥的,其他不定项因素,写了这个。
我是这样解决的:
package com.liruilong.demotext.service.utils; import java.io.*; /** * @Description : * @Author: Liruilong * @Date: 2020/3/15 18:37 */ public class EncodingUtil { public static void gbkAndUtf8(File file) { if (!file.exists() || file.isDirectory()) { System.out.println("输入路径不对"); } else { // 以GBK格式,读取文件 FileInputStream fileInputStream = null; InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null; FileOutputStream fileOutputStream = null; OutputStreamWriter outputStreamWriter = null; try { fileInputStream = new FileInputStream(file); inputStreamReader = new InputStreamReader(fileInputStream, "GBK"); bufferedReader = new BufferedReader(inputStreamReader); String str = null; // 创建StringBuffer字符串缓存区 StringBuffer stringBuffer = new StringBuffer(); // 通过readLine()方法遍历读取文件 while ((str = bufferedReader.readLine()) != null) { // 使用readLine()方法无法进行换行,需要手动在原本输出的字符串后面加"\n"或"\r" str += "\n"; stringBuffer.append(str); } String str2 = stringBuffer.toString(); // 以UTF-8格式写入文件,file.getAbsolutePath()即该文件的绝对路径,false代表不追加直接覆盖,true代表追加文件 fileOutputStream = new FileOutputStream(file.getAbsolutePath(), false); outputStreamWriter = new OutputStreamWriter(fileOutputStream, "UTF-8"); outputStreamWriter.write(str2); outputStreamWriter.flush(); } catch (IOException e) { e.printStackTrace(); } finally { allClose(outputStreamWriter, fileOutputStream, bufferedReader, inputStreamReader, fileInputStream); } } } public static void allClose(Closeable... closeables) { for (Closeable closeable : closeables) { try { closeable.close(); } catch (IOException e) { e.printStackTrace(); } } } }