当前位置: 首页 > 工具软件 > pyftpdlib > 使用案例 >

pyftpdlib中文乱码问题解决方案

公孙涵育
2023-12-01

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

 类似资料: