sftp.get 文件中文内容乱码

  • Post author:
  • Post category:其他


学习了《

读取服务器文件,并进行移动-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 版权协议,转载请附上原文出处链接和本声明。