pyftpdlib中文乱码的解决之道

pyftpdlib默认用常量字符串设置了编码:utf8

这本身没有问题,但问题是windows和一些FTP client 使用的不是utf8,所以中文乱码。甚至无法进入自己建立的中文目录

解决之道:修改两个源文

为了可能再使用别的编码,所以改得略复杂点:

 

一、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)
三、使用:
    定义好handler之后,将这赋给ftpserver前:
    handler.encoding='gbk'
 

 

 

 

 

 

 
posted @ 2020-09-12 20:34  吾非无心  阅读(1515)  评论(0编辑  收藏  举报