栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

org.apache.commons.net.ftp.FTPClient上传中文文件乱码问题

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

org.apache.commons.net.ftp.FTPClient上传中文文件乱码问题

前一段时间做了一个文件上传到FTP服务器的功能(使用org.apache.commons.net.ftp.FTPClient进行上传文件到FTP服务器),做的过程当中也遇到了和大家很多人都遇到过的问题:上传中文文件乱码问题,当时一通百度然后挨个挨个的试,最后使用了下面这两行代码解决了中文乱码问题,但是知其然并不知其所以然。最近正好不忙,所以了解了一下为什么使用这两行代码后上传中文文件就不乱码了。

ftpClient.sendCommand("OPTS UTF8", "ON");

ftpClient.storeFile(new String(fileName.getBytes("UTF-8"), "ISO-8859-1"), inputStream);

首先要明白两个编码,FTP协议的编码,FTP服务器的编码

**FTP协议编码:**指的是FTP传输协议所用的编码,默认为ISO-8859-1

**FTP服务器编码:**指的是所用的FTP服务器的编码(如UTF-8、GBK)

**源文件是通过FTP传输协议传输到FTP服务器的,而FTP传输协议所使用的编码是ISO-8859-1,所以在使用FTP协议传输之前需要先将文件名转码为ISO-8859-1再进行传输,当FTP服务器接收到上传的源文件之后同样会进行转码操作。**FTP服务器解码时使用的是自身的默认字符集(UTF-8或其他),所以我们要保证在上传文件对文件进行编码操作时使用的字符集要与FTP服务器使用的解码字符集保持一致。

@Test
public void transcodingUtf8() throws UnsupportedEncodingException {
  String string = "西红柿炒鸡蛋";

  // UTF-8 --> ISO-8859-1
  String iso88591String = new String(string.getBytes("UTF-8"), "ISO-8859-1");
  // SO-8859-1 --> UTF-8
  System.out.println(new String(iso88591String.getBytes("ISO-8859-1"), "UTF-8"));
}

Java中org.apache.commons.net.ftp.FTPClient上传文件的大体流程和使用FTP客户端上传文件是差不多的。我们先来看一下当我们使用FTP客户端上传文件到FTP服务器的大体流程,看一看FTP客户端和FTP服务器都对文件名称做了什么样的处理(我这里的FTP客户端是Transmit,FTP服务器是vsftpd)。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/910773.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号