我正在使用 java 库 (edtftpj) 将文件从 Tomcat 服务器托管的 Web 应用程序 FTP 到 MVS 系统。
FTP 传输模式是 ASCII 并使用 FTP 流完成传输。来自 String 变量的数据存储到 MVS 数据集中。
问题是所有的 & 字符都被转换为&
. 我尝试了各种转义字符,包括 \& 、 ^& 和 X'50' (十六进制值),但都没有帮助。
请问有人知道如何逃脱&符号吗?
FTP 协议中的任何内容都不会导致这种编码行为。
表示&
为&
基于XML 的转义表示。其他系统可能使用相同的方案,但作为标准,这是一种 XML 标准编码。
读取数据和写入数据的某些东西认为它应该转义此信息并进行编码。
如果 MVS 系统上的任何东西使用 Java,那么它可能是通过 SOAP 与其他一些连接器进行通信,这意味着 XML,这可能导致转义序列发生。
无论哪种方式,FTP 协议本身都不是问题的一部分,ASCII 传输应该只对行尾之类的东西进行编码,&
已经是一个有效的 ASCII 字符并且不会受到影响。如果有的话,正是 MVS 系统进行了这种转义。
几乎在所有情况下都首选二进制传输,因为它不对原始字节进行任何解释或编码。
在 ASCII 模式下使用 FTP 到/从 MVS (z/OS) 将始终为数据连接执行代码页转换(即 ASCII <-> EBCDIC)。因此,根据数据集类型和页面代码使用适当的参数设置连接非常重要。例子:
site SBD=(IBM-037,ISO8859-1)
site TRAck
site RECfm=FB
site LRECL=80
site PRImary=5
site SECondary=5
site BLKsize=6233
site Directory=50
作为替代方案,使用 BINARY 模式并在接收端使用一些标准工具或库手动执行转换。
参考链接:
1. 预设命令解决代码页问题。
2. 通过 MVS 主机上的 FTP 将 ASCII 转换为 EBCDIC。
3. 与 MVS 之间传输文件。
4. FTP代码页转换。
5. FTP 文件传输协议和 Z/OS (pdf)。