从Java应用程序到大型机数据集的FTP-带开/关括号的问题

斯科特

解决方案:除了按照布鲁斯·马丁的回答将charset / codepage设置为cp037之外,我还必须更改FTP逻辑中的设置(使用apache commons net)。我必须将文件类型设置为EBCDIC。这是一些示例代码来显示我在做什么。

public FTPClient openFTPConnection() {
    String server = [server];
    int port = [port];
    int reply;
    FTPClient ftpClient = new FTPClient();
    ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
    try {
        ftpClient.connect(server, port);
        reply = ftpClient.getReplyCode();
        System.out.println(reply);
        if (!FTPReply.isPositiveCompletion(reply)) {
            System.out.println(reply);
            ftpClient.disconnect();
            throw new Exception("Exception in connecting to FTP Server");
        }
        ftpClient.login(user, pass);
        ftpClient.setFileType(FTP.EBCDIC_FILE_TYPE); 
        //Previously, this was set to FTP.ASCII_FILE_TYPE
        ftpClient.enterLocalPassiveMode();
    } catch (Exception e) {
        System.out.println("Error: " + e.getMessage());
        e.printStackTrace();
    }
    return ftpClient;
}
public List ftpStoreAuthData(FTPClient ftpClient) {
    try {
        String mainframeDataSet = [dataset];
        InputStream stream = ftpClient.retrieveFileStream(mainframeDataSet);
        logger.trace("Retrieving mainframe data set...");
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "cp037"));
                                                   //Previously, this was set to "utf-8"
        logger.trace("Data set Retrieved!");
        String datasetText;
        while((datasetText = reader.readLine()) != null) {
             //do things with dataset records
        }
        return new ArrayList<>();
    }

我正在用Java开发REST应用程序。我的REST端点之一向大型机发出FTP请求,并检索其中包含'['和']'字符的数据集。

我尝试使用Apache Commons Net和Spring的sftpsessionfactory FTP库。在这两种情况下,打开/关闭方括号字符都会作为返回给我的应用程序。当我从检索的数据集中读取每条记录时,有一个if条件检查特定记录是否包含'['或']'字符,并且显然失败。

作为一种技巧,我更改了if条件,以便改为检查``s''。这是可行的,是一种快速解决方案。这种解决方法的问题在于,当我最终将数据集通过FTP传输回大型机时,它最终成为一个问题。我用'[]'覆盖了s,但是当文件命中大型机时,右括号显示为'Ý',右括号显示为'¨。我在大型机上使用“ HEX ON”命令来查看所需的打开/关闭括号和我发送的打开/关闭括号之间的区别。

我要发送的左括号(Ý)的十六进制值为AD。数据集所需的开括号具有十六进制值BA。

我要发送的右括号(¨)的十六进制值为BD。数据集所需的右括号的值为十六进制BB。

如何编写括号以匹配数据集所需的十六进制值?另外,如何检索数据集时使括号不显示为?我听说这个问题与不同的EBCDIC代码页转换有关,这很好,但是我不确定如何解决该问题。

让我知道您是否需要查看我的FTP代码。如有必要,我可以发布它。

布鲁斯·马丁(Bruce Martin)

您可以使用适当的EBCDIC字符集IBM037 / CP037是美国EBCDIC。还有很多其他功能,例如在德国/奥地利使用cp273。

你可以做

    Reader r = new InputStreamReader(in, "cp037");
    String s = new String(bytes, "cp037");
       // or for 3 spaces
    String spaces = new String(new byte[] {40, 40, 40}, "cp037");

读取EBCDIC流/转换数组字节以文本

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用junit的带开关盒的测试程序

来自分类Dev

使用junit的带开关盒的测试程序

来自分类Dev

FTP文件到大型机

来自分类Dev

JAva获取类变量:多个方法或一个带开关的方法

来自分类Dev

带开关的 Javascript 查询

来自分类Dev

Java开关/案例与问题

来自分类Dev

ActionScript 3 | 带开关的hitTestObject

来自分类Dev

带开关的iOS中断循环

来自分类Dev

带开关的通用功能

来自分类Dev

大型业务应用程序-Azure云数据库和存储问题

来自分类Dev

大型业务应用程序-Azure云数据库和存储问题

来自分类Dev

带开关或复选框的Vuetify表

来自分类Dev

RxJava Live Reactive Queue(带开关)

来自分类Dev

引导程序开关句柄宽度问题

来自分类Dev

使用C#将FTP文件传输到包含数据集的大型机-将FTP脚本转换为FtpWebRequest代码

来自分类Dev

大型AngularJS应用程序的页面加载性能问题

来自分类Dev

Spring Integration不与FTP大型机系统同步

来自分类Dev

如何基于枚举名称动态创建对象?不带开关

来自分类Dev

带开关的角度过滤器列表(角度材料)?

来自分类Dev

Java应用程序远程显示的问题

来自分类Dev

大型机平面文件到C#类

来自分类Dev

大型机平面文件到C#类

来自分类Dev

是否存在用于处理大型机数据的模式?

来自分类Dev

将mysql数据库与基于Java的Web应用程序链接时出现问题

来自分类Dev

将PHP应用程序部署到Elastic Beanstalk的问题

来自分类Dev

将应用程序升级到Rails 4问题

来自分类Dev

大型数据集的JQuery Datatables makeEditable()问题

来自分类Dev

从大型机访问 Oracle

来自分类Dev

将数据库文件复制到iOS应用程序时出现问题

Related 相关文章

热门标签

归档