FTP二进制x ASCII自动选择

FTP二进制x ASCII自动选择,ftp,binary,ascii,Ftp,Binary,Ascii,我编写了一个FTP插件(使用python的ftplib),我想知道什么是最好的方法来确定它应该对给定的文件使用二进制还是ASCII传输方法。换言之,“自动”传输模式 我开始研究这个问题,因为我得到了关于双线的问题报告,谷歌发现二进制模式应该负责[1][2] 它可能使用假定为二进制或ascii的白名单或黑名单扩展,但它可能不存在,当然还有一个问题,即使用哪种方法(wl x bl,b x a)。这听起来不够可靠(列表不完善,缺少扩展) ->问:对于给定的文件,选择二进制或ascii传输模式的可靠方法

我编写了一个FTP插件(使用python的ftplib),我想知道什么是最好的方法来确定它应该对给定的文件使用二进制还是ASCII传输方法。换言之,“自动”传输模式

我开始研究这个问题,因为我得到了关于双线的问题报告,谷歌发现二进制模式应该负责[1][2]

它可能使用假定为二进制或ascii的白名单或黑名单扩展,但它可能不存在,当然还有一个问题,即使用哪种方法(wl x bl,b x a)。这听起来不够可靠(列表不完善,缺少扩展)

->问:对于给定的文件,选择二进制或ascii传输模式的可靠方法是什么?(如果有…)
多谢各位

[1]

[2]

首先,您需要检查标识为UTF16或UTF8的文件。如果它们存在,则文件为文本文件的概率为99.9%


接下来,您可以扫描文件并检查它是否包含代码小于32而不是9、10和13的字符(制表符、LF、CR)。如果文件中没有此类字符,则文件可能是文本。但是这里没有保证,或者用户可以显式地请求以二进制模式传输文件

多谢各位。我希望避免浏览整个文件(不能假设它们会很小),但现在我将您的BOM方法与用户可调整的ascii和二进制扩展名WhiteListShow结合使用。尽管我发现ascii模式有问题,但将所有内容转换为ascii会破坏许多文件。以二进制形式传输所有内容并用我们自己想要的(通常是特定于操作系统的)变体替换EOL似乎要好得多