使用SFTP将ANSI文件从OpenVms下载到Windows系统。文件中添加了额外的nul字符

时间:2018-08-23 19:33:47

标签: windows encoding sftp openvms

我在OpenVms系统上有一些文件。 .xml,.cfg和一些二进制文件。这些文件的编码类型为ANSI。当我使用FTP模式二进制文件下载时,一切正常。

但是,如果我使用SFTP(与使用哪个客户端无关)下载,则会在文件中添加额外的NUL字符。

有人有同样的问题吗?

2 个答案:

答案 0 :(得分:3)

user8436611,在OpenVMS术语中没有“ ANSI”文件之类的东西。 也许您的意思是一个仅包含简单的7位ASCII字符的文件??

在OpenVMS上,包含简单文本的简单“顺序”文件仍然可以具有多个记录“格式”。

本机OpenVMS格式称为VARIABLE LENGTH。 使用DIRECTORY / FULL报告文件类型或DCL命令$ WRITE SYS $ OUTFUT F $ FILE_ATTRIBUTES(filespec,“ RFM”) 对于可变长度文件,每个记录(行)都以(16位)字对齐的(16位)二进制长度指示符字为前缀。对于“短”行(<256字节),将显示二进制零字节。并且任何奇数长度的记录都将出现一个空字节,以对齐下一个记录长度的字。 (单词= int-2)

如果将此类文件传输为二进制文件,则大多数工具会将其分成512个字节的块,并带有控制字和可选的对齐字节,就像另一边的二进制零一样。

因此,正如Mark Diaz指出的那样,您需要告诉您的工具以“ ASCII”或“ TEXT”模式进行传输。

OpenVMS还支持“普通”文件,其中每个记录(行)后跟一个终止符,该终止符可以是换行符(Unix),回车符或CR-LF(窗口)。

如果我怀疑您的OpenVMS文件确实是OpenVMS的标准长度可变文件, 那么您可以考虑使用“ FDL”文件或字符串将其“转换”为“ Stream_LF”。 DCL命令示例:$ CONVERT / FDL =“ RECORD; FORMAT STREAM_LF” old.dat new.dat

祝你好运, 海因

答案 1 :(得分:0)

同意,这可能不是解决该问题的最佳论坛。 但是,通常来说,如果您实质上是文本文件(xml),则将FTP传输模式显式设置为文本应该会有所帮助。一些FTP服务器/客户端会根据文件类型(.xml)猜测文件是文本文件还是二进制文件。