pyftpdlib中文乱码问题解决方案

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值