ftp解决中文乱码

您所在的位置:网站首页 ftp打开文件夹乱码解决办法 ftp解决中文乱码

ftp解决中文乱码

2024-07-17 07:42| 来源: 网络整理| 查看: 265

问题描述: 在项目中,使用java操作ftp服务时,中文的目录和文件名出现了乱码。 原因分析:

ftp协议规定目录和文件名编码为 iso-8859-1,所以中文的目录或文件名需要进行转码。

解决方案:

1、服务器设置utf-8

[root@k8s-master k8s]# locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL=

2、编码转换

进行 UTF-8 和 ISO-8859-1 的转换

public static String encodingUTF8(String src) throws UnsupportedEncodingException { return new String(src.getBytes("UTF-8"), "ISO-8859-1"); }

使用到目录或文件名时先进行编码转换。

3、切换或创建目录

/** * 切换目录 * * @param path 需要切换的目录 * @param forcedIncrease 如果目录不存在,是否增加 */ public static boolean switchDirectory(FTPClient client, String path, boolean forcedIncrease) { boolean ok = false; try { //这里调用编码转换 path = encodingUTF8(path); if (path != null && !"".equals(path)) { ok = client.changeWorkingDirectory(path); if (ok) { return true; } else if (forcedIncrease) { // ftpPath 不存在,手动创建目录 String[] paths; if (path.contains("/")) { paths = path.split("/"); if (path.startsWith("/")) { client.changeWorkingDirectory("/"); } } else if (path.contains("\\\\")) { paths = path.split("\\\\"); } else { paths = new String[1]; paths[0] = path; } ok = Arrays.stream(paths).filter(StringUtils::isNotBlank).allMatch(dir -> { try { client.makeDirectory(dir); return client.changeWorkingDirectory(dir); } catch (IOException e) { log.debug("切换目录异常,error: {}", e.getMessage()); return false; } }); } } } catch (Exception e) { log.debug("切换目录异常,error: {}", e.getMessage()); } return ok; }


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3