sftp.get 文件中文内容乱码

学习了《读取服务器文件,并进行移动-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的编码,也许就解决问题了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值