学习了《
读取服务器文件,并进行移动-ChannelSftp》
在使用的时候,出现中文的内容是乱码:
511E8F0BC75DCC97A9A8DF7D4ABE813C|2022-08-29 10:42:27|2022-08-29 10:43:31|δ???,
90805C2F2395109E8147CB8179EE82DC|2022-08-29 10:44:11|2022-08-29 10:44:24|???
去服务器上看,是正常的:
511E8F0BC75DCC97A9A8DF7D4ABE813C|2022-08-29 10:42:27|2022-08-29 10:43:31|已处理,
90805C2F2395109E8147CB8179EE82DC|2022-08-29 10:44:11|2022-08-29 10:44:24|未处理
试试把UTF-8的编码,改为
GBK
的编码试下,读取就正常了。
在不影响原来的基础上,修改的代码:
/**
* 获取文件数据 默认是UTF-8编码的
*/
public List<String> getList(ChannelSftp sftp, String ftpRootDir) {
return getFileData(sftp, ftpRootDir, "UTF-8");
}
/**
* 获取文件数据 默认是GBK编码的
*/
public List<String> getListWithGBK(ChannelSftp sftp, String ftpRootDir) {
return getFileData(sftp, ftpRootDir, "GBK");
}
/**
* 获取文件数据
* @param sftp ChannelSftp
* @param ftpRootDir 文件文件+文件名,比如: /home/ddzxsftp/ivr/33.txt
* @param charsetName 文件编码,比如UTF-8,GBK,为空默认为UTF-8
* @return List<String>
*/
public List<String> getFileData(ChannelSftp sftp, String ftpRootDir, String charsetName) {
if(StringUtils.isBlank(charsetName)){
charsetName = "UTF-8";
}
List<String> list = new ArrayList<>();
try {
InputStream is = sftp.get(ftpRootDir);
String str;
BufferedReader br = new BufferedReader(new InputStreamReader(is, charsetName));
while ((str = br.readLine()) != null) {
list.add(str);
}
br.close();
} catch (Exception e) {
logger.error("获取文件数据异常 {}", e);
}
return list;
}
总结:
遇到编码的问题,UTF-8编码下,中文还是乱码,就先试试GBK的编码,也许就解决问题了。
版权声明:本文为qq_35461948原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。