启用 UTF-8 到 EBCDIC 编码的站点代码

Posted

技术标签:

【中文标题】启用 UTF-8 到 EBCDIC 编码的站点代码【英文标题】:Site code to enable UTF-8 to EBCDIC encoding 【发布时间】:2015-06-08 20:34:14 【问题描述】:

我正在尝试将一个相当大的 UTF-8 文件传输到 Z/OS 数据集。不幸的是,命令

SITE EN=MBCS MBD=(1047,1208) RECFM=VB
TYPE A
STOR STORE.WRK.DATA

回应

504 Multi-byte encoding not supported for RECFM=FB

RECFM=VB 似乎不起作用。

解决方法是在上传之前将 UTF-8 重新编码为 ISO-8859-1,但在上传时编码更有效。

【问题讨论】:

那么你的问题是什么?你现在是怎么编码的? 原始文件以 UTF-8 编码,转码为 ISO_8859-1,然后使用 FTP 以 ASCII 模式上传到 Z/OS 数据集。我正在寻找一种将 ASCII 模式 FTP 配置为直接接受 UTF-8 的方法。 请注意...UTF-8 当然可以表示比 ISO-8859 更多的字符,因此如果您的 UTF 中实际上存在多字节序列,您应该为数据丢失的可能性做好准备-8 不能用 ASCII 表示的文件。当检测到这一点时,底层的“iconv()”例程并不令人愉快。 另外一件事...我发现 UNIX 服务文件是您处理这类事情的朋友。假设您的站点设置正确,更改您的 STOR 以引用路径 (./store.wrk.data) 将使许多这些问题消失 - 对于 UNIX 文件,通常没有 RECFM 这样的东西。 【参考方案1】:

完成这项工作的技巧可能是多方面的。

首先,相关站点必须具有在 z/OS 的 Unicode 转换服务中定义的从 IBM-1047 到 IBM 1208 的转换。如果不是,那么隐蔽的尝试将会失败。

其次,您不能将每个字符代码页的单个字节发送到为此大小的数据集,而是将其转换为每个字符代码页的多字节。如果该数据集中的任何字符增长到两个或三个字节,则记录长度将导致失败。因此,将其传输到可变记录长度数据集,就可以了。

【讨论】:

事实证明,无论如何我们都必须对文件进行预处理,所以我们保留了转换代码。 BufferedReader br = new BufferedReader(new java.io.InputStreamReader(inputdoc.getInputStream(),"UTF-8"));BufferedWriter bw = new BufferedWriter(new java.io.OutputStreamWriter(outputdoc.getOutputStream(), "Windows-1252"));

以上是关于启用 UTF-8 到 EBCDIC 编码的站点代码的主要内容,如果未能解决你的问题,请参考以下文章

在 USS 上的 Python 脚本中使用 iconv 将 UTF-8 转换为 EBCDIC

JAVA 到 EBCDIC 的转换没有发生

如何在 Java 字符串中存储 EBCDIC (IBM-1047) 编码文本而不损坏它?

通过 USS 中的 xlc fgets() 控制从 ASCII 到 EBCDIC 的自动转换

使用 PHP 加载 UTF-8 编码的 HTML 站点

在python中将ebcdic解码为ascii /可读文本