解决使用ScriptRunner执行sql脚本中文乱码的问题

分类:计算机 | Java | Java-IO | 输入和输出 495
更新:2020-11-05 00:21:17
编辑

1 问题说明

最近在使用ScriptRunner执行sql脚本时发现一个问题,就是如果sql脚本中有中文,使用FileReader直接读取sql脚本的话会出现中文乱码的情况,导致脚本执行失败。
原来的代码如下:

Reader read = new FileReader(new File("temp.sql"));
System.out.println("读取路径read================" + read);
runner.runScript(read);
runner.closeConnection();
conn.close();
System.out.println("sql脚本执行完毕");

2 问题分析

文件流读取时使用的编码方式和文件本身编码方式不同,造成读取出来文件乱码。

3 问题解决

读取文件时指定读取文件的编码方式。代码如下:

InputStreamReader isr = new InputStreamReader(new FileInputStream(new File("temp.sql")), "UTF-8");
BufferedReader br = new BufferedReader(isr);
runner.runScript(br);
runner.closeConnection();
conn.close();
System.out.println("sql脚本执行完毕");

使用FileInputStream类读取文件流,BufferedReader构造方法只能接收字符流,利用InputStreamReader将文件流转化为字符流,同时指定文件流的编码方式,将字符流放到 BufferedReader中再进行操作,可以解决中文读取乱码问题。

4 参考资料

FileReader读取中文字符乱码问题