python实现简易的FTP服务器

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer # 实例化虚拟用户,这是FTP验证首要条件
authorizer = DummyAuthorizer()
path = r'D:\下载'
# 添加用户权限和路径,括号内的参数是(用户名, 密码, 用户目录, 权限)
authorizer.add_user('user', '12345', path, perm='elradfmw') # 添加匿名用户 只需要路径
authorizer.add_anonymous(path) # 初始化ftp句柄
handler = FTPHandler
handler.encoding = 'gbk'
handler.authorizer = authorizer # 监听ip 和 端口,因为linux里非root用户无法使用21端口,所以我使用了2121端口
server = FTPServer(('127.0.0.1', 2121), handler) # 开始服务
server.serve_forever()

通常,由于编码格式的问题,客户端访问时会出现中文乱码问题

解决

一、filesystem.py

在类 AbstractedFS 中:
增加属性:encoding

@property
def encoding(self):
return self.__encoding @encoding.setter
def encoding(self,value):
self.__encoding=value #复制代码
#修改__init__: def __init__(self, root, cmd_channel,encoding):
#...
#...
self.__encoding=encoding
#并且将本文件中所有'utf8'替换为:self.encoding

二、修改handler

在类 FTPHandler 中:
同样增加属性encoding
复制代码

    @property
def encoding(self):
return self.__encodingg
@encoding.setter
def encoding(self,value):
self.__encoding=value
self.fs.encoding=value #复制代码
#在__init__中增加: self.__encoding='utf8'
#在方法中 def handle_auth_success(。。。)修改一下(因为改了AbstractFS构造函数):
self.fs = self.abstracted_fs(home, self,self.encoding)

转载(https://www.cnblogs.com/xhzxlqt/p/13658481.html)

不想修改也可直接下载替换

filesystem.py
handlers.py

pyftpdlib中文乱码问题解决方案的更多相关文章

  1. 使用Kettle抽取数据时,出现中文乱码问题解决方案

    使用Kettle在不同的数据库抽取数据时,有时会出现中文乱码问题:其解决方案如下: 1.查看数据库的字符集是否是UTF-8(最常用的字符集) 2.如果数据库设置正确仍然存在中文乱码,则可能是因为有的客 ...

  2. C# 读取oracle 中文乱码的解决方案

    用OracleDataAccess.dll访问oracle数据库,遇到中文乱码的情况. 解决方案如下: 1查看字符集编码, 在数据库服务器端 启动 sqlplus SQL->select use ...

  3. Cygwin 各种情况下中文乱码--终极解决方案

    0.引言 本人从进公司以来一直负责公司Android平台下产品的NDK开发,用的工具: 01. Google的adt-bundle(集成了eclipse和sdk) 02. NDK 03. Cygwin ...

  4. Spring Boot 中文乱码问题解决方案汇总

    使用 Spring Boot 开发,对外开发接口供调用,传入参数中有中文,出现中文乱码,查了好多资料,总结解决方法如下: 第一步,约定传参编码格式 不管是使用httpclient,还是okhttp,都 ...

  5. mysql插入表数据中文乱码问题解决方案

    一.问题 开发中遇到将其它数据库数据插入到mysql数据库表中一直会报类似如下错误: Incorrect string value: '\xE6\x88\x91' for column 'name' ...

  6. 关于 IntelliJ 的 IDEA PyCharm 等更新 2019.2 后中文乱码 的解决方案

    关于IntelliJ 的2019.2 更新后的中文乱码解决方案 设置 备用字体 file -> Setting -> Editor ->Font 由于编程常用英文首选字体font默认 ...

  7. xampp3.2下mysql中文乱码终极解决方案

    xmapp3.2.2中mysql已经被替换成了Mariadb,网上那些显示char语句已经失灵. 另外本文主要介绍的是手动在mysql中写入中文乱码问题 那么我们将采用如下三个步骤解决乱码问题 1.打 ...

  8. MySql 中文乱码排查解决方案

    MySQL会出现中文乱码的原因不外乎下列几点: server本身设定问题,例如还停留在latin1 table的语系设定问题(包含character与collation) 客户端程式(例如php)的连 ...

  9. [原创]Gerrit中文乱码问题解决方案分享

    应开发同事的要求,部署了Gitlab+Gerrit+Jenkins的持续集成环境. 但是发现了一个问题,Gerrit登陆后有中文乱码出现. 具体情况如下: (1)Git代码中的中文乱码处理: 为妥善解 ...

  10. eclipse中文乱码问题解决方案

    eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...

随机推荐

  1. Java中的SPI原理浅谈

    在面向对象的程序设计中,模块之间交互采用接口编程,通常情况下调用方不需要知道被调用方的内部实现细节,因为一旦涉及到了具体实现,如果需要换一种实现就需要修改代码,这违反了程序设计的"开闭原则& ...

  2. vue方法同步(顺序)执行:async/await使用

    https://blog.csdn.net/qq_38591756/article/details/90173323 项目中有一个地方需要获取到接口返回值之后根据返回值确定之后执行的步骤,使用asyn ...

  3. linux中通过date命令获取昨天或明天时间的方法

    date命令可以获取当前的时间,通过man,可以看到date有很多参数可以用,很容易做到格式化 # 获取当前日期 date +"%F" 或者 date +"%Y-%m-% ...

  4. PPR的断管

    1. 小管径PPR管的断管 2. 大管径PPR管的断管

  5. Elasticsearch准实时索引实现(数据写入到es分片并存储到文件中的过程)

    溢写到文件系统缓存 当数据写入到ES分片时,会首先写入到内存中,然后通过内存的buffer生成一个segment,并刷到文件系统缓存中,数据可以被检索(注意不是直接刷到磁盘) ES中默认1秒,refr ...

  6. Kafka QuickStart

    环境版本 操作系统:CentOS release 6.6 (Final) java版本: jdk1.8 kafka 版本: kafka_2.11-1.1.1.tgz 安装kafka 1. 下载压缩包, ...

  7. HM VNISEdit2.0.3修正版

    HM VNISEdit,曾经是NSIS最强最佳开源免费编辑器/IDE,但2003年至今原作者已经接近20年未再更新,随着NSIS3.X版本的普及,NIS Edit不可避免的出现了大大小小的各种BUG, ...

  8. golang channel底层结构和实现

    一.介绍 Golang 设计模式: 不要通过共享内存来通信,而要通过通信实现内存共享 channel是基于通信顺序模型(communication sequential processes, CSP) ...

  9. POJ3311 Hie with the Pie(状压DP,Tsp)

    本题是经典的Tsp问题的变形,Tsp问题就是要求从起点出发经过每个节点一次再回到起点的距离最小值,本题的区别就是可以经过一个节点不止一次,那么先预处理出任意两点之间的最短距离就行了,因为再多走只会浪费 ...

  10. kubernetes Tcp流量可视化

    kubernetes Tcp流量可视化 使用k8spacket和grafana的node graph插件可以查看kubernetes pod的TCP相关信息,如connection.bytes.和du ...