热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

jsch乱码有什么好的解决方案么?

如题,或者说FTP服务端编码不确定的情况下如何保证不会乱码吾辈在项目中使用

如题,或者说 FTP 服务端编码不确定的情况下如何保证不会乱码

吾辈在项目中使用

1
jsch

连接 SFTP,然而使用

1
ls

获取文件列表中的中文文件名都乱码了,而且参数为中文文件名的时候会直接抛出异常

1
no such file

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package com.zx.idc.common.ftp.sftp;



import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.Session;

import com.jcraft.jsch.SftpException;

import org.junit.Test;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;



import java.util.Properties;

import java.util.Vector;

import java.util.stream.Collectors;



/**

 * @author rxliuli

 */

public class SftpTest {

    private final Logger log = LoggerFactory.getLogger(getClass());



    @Test

    public void ls() {

        final JSch jSch = new JSch();

        ChannelSftp sftp = null;

        Session session = null;

        try {

            session = jSch.getSession("rxliuli", "localhost", 22);

            session.setPassword("123456");

            final Properties properties = new Properties();

            properties.put("StrictHostKeyChecking", "no");

            session.setConfig(properties);

            session.connect();

            log.info("JSch open ssh session successful: {}", session);



            sftp = (ChannelSftp) session.openChannel("sftp");

            sftp.connect();

            /*

            如果使用 GBK 抛出异常

            com.jcraft.jsch.SftpException: The encoding can not be changed for this sftp server.

             */

            sftp.setFilenameEncoding("UTF-8");



            log.info("Sftp connection successful: {}", sftp);



            /*

            结果是:

            TestSftpDir

            .xsd

            Ŀ¼

             */

            final Vector list = sftp.ls("/");

            log.info("list: \n{}", list.stream().map(ChannelSftp.LsEntry::getFilename).collect(Collectors.joining("\n")));

            /*

            抛出异常:

            com.jcraft.jsch.SftpException: No such file

             */

            try {

                sftp.ls("/测试中文目录");

            } catch (SftpException sftpException) {

                sftpException.printStackTrace();

            }

            /*

            也会抛出异常:

            com.jcraft.jsch.SftpException: No such file

             */

            try {

                sftp.ls(new String("/测试中文目录".getBytes("GBK"), "ISO-8859-1"));

            } catch (SftpException sftpException) {

                sftpException.printStackTrace();

            }

        } catch (Throwable e) {

            log.error("sftp operation failed: {}", e);

            throw new RuntimeException(e);

        } finally {

            if (sftp != null && sftp.isConnected()) {

                sftp.disconnect();

            }

            if (session != null && session.isConnected()) {

                session.disconnect();

            }

        }

    }

}

已经尝试的解决方案有:

  • 使用
    1
    sftp.setFilenameEncoding("UTF-8");

    设置文件名编码为

    1
    UTF-8

    :实测无效


  • 使用
    1
    sftp.setFilenameEncoding("GBK");

    :抛出异常

    1
    com.jcraft.jsch.SftpException: The encoding can not be changed for this sftp server.


  • 使用
    1
    sftp.ls(new String("/测试中文目录".getBytes("GBK"), "ISO-8859-1"))

    编码文件名,抛出异常

    1
    com.jcraft.jsch.SftpException: No such file


有人遇到过这种问题么?


推荐阅读
  • 本文实例讲述了Android编程实现读取工程中的txt文件功能。分享给大家供大家参考,具体如下:1.众所周知,Android的res文件夹 ... [详细]
  • PHP连接MySQL的2种方法小结以及防止乱码【PHP】
    后端开发|php教程PHP,MySQL,乱码后端开发-php教程PHP的MySQL配置报错信息:ClassmysqlinotfoundinAnswer:1.在confphp.ini ... [详细]
  • javaftp上传,javaftp下载文件
    本文目录一览:1、javaftp上传5G以上大文件,怎么做 ... [详细]
  • IP双栈环境下网络应用迁移
    IPv4向IPv6迁移有多种途径,在选择具体的迁移方式时,当前环境中运行的应用是否支持IPv6是重要的考量因素之一,同时在编写新的应用时,需要考虑新编写的应用不仅可以适应当前主流的IPv4环境, ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 网络安全是一个非常重要的课题,基本上你运行的服务后台越多,你就可能打开更多的安全漏洞.如果配置的恰当的话,Linux本身是非常安全可靠的,假使在Linux系统中有某个安全缺陷,由于Linu ... [详细]
  • 本人新手,用Unity3D想做一个简单的赛车游戏,现在的问题是转弯的时候很容易出现翻车的情况,求解决思路比如说你的中心是在(0,0,0),你把他设置成(0,-1.0,0)之类的就可 ... [详细]
  • c# java socketn 字节流_C#Socket编程详解(一)TCP与UDP简介
    一、TCP与UDP(转载)1、TCP1.1定义TCP(TransmissionControlProtocol)传输控制协议。是一种可靠的、面向连接的协议(eg:打电话)、传输效率低 ... [详细]
  • SVN 功能说明(简版)
    Subversion(SVN)是什么?SVN是一种版本管理系统,是开源软件的基石。即使在沟通充分的情况下,多人维护同一份源代码的一定也会 ... [详细]
  • Azkaban(三)Azkaban的使用
    界面介绍首页有四个菜单projects:最重要的部分,创建一个工程,所有flows将在工程中运行。scheduling:显示定时任务executing:显示当前运行的任务histo ... [详细]
  • PHP程序员玩转Linux系列 搭建FTP代码开发环境
    PHP程序员玩转Linux系列搭建FTP代码开发环境-PHP程序员玩转Linux系列文章:有些同学可能觉得我写的都是啥yum安装的,随便配置一下而已,没啥技术含量,我的目的是让大家 ... [详细]
  • 明明白白用Qt5.10编写FTP客户端
    使用Linux自带工具实现定时下载FTP文件(文末)前言自从Qt5删除了QFtp模块后,就没有了可方便使用的FTP类。根据官方的说法&# ... [详细]
author-avatar
mgmonster
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有