4

我遇到了一个要求,我需要将字符串转换为 EBCDIC 编码,然后对其进行排序。我们需要使用 EBCDIC 对其进行排序,因为字符串必须进入大型机。我要排序的字符串只有大写字母和整数。

我用谷歌搜索了一些,然后我发现了 IBM 的链接,该链接按顺序列出了字符

我意识到 EBCDIC 排序与普通的 java 字典排序完全相反(至少对于我要处理的数据类型)。

我的问题是我的认识对吗?如果不是我错过了什么?或者是否有任何可用于 EBCDIC 编码的 java 比较器。

4

3 回答 3

5

您不应该花太多时间弄清楚 EBCDIC 的许多特性。鉴于您的问题范围有限,实现您的要求的简单方法如下:

  • 实现读取 EBCDIC 并java.lang.String以 Java 的本机编码 (UTF-16)生成的辅助方法
  • 实现一个辅助方法,该方法采用java.lang.StringJava 的本机编码 (UTF-16) 并生成 EBCDIC 编码的字符串
  • 使用第一种方法读取数据。根据需要排序并进行其他处理。使用第二种方法将数据写入大型机。

这种方法有一个优点,即您的两段代码需要理解 EBCDIC - 一个转换为输入,一个转换为输出。所有其他代码都可以使用 Java 系统库以及您拥有的任何库来进行排序、过滤、搜索和所有其他处理,而根本无需考虑 EBCDIC 编码。

于 2014-07-02T07:26:27.163 回答
5

由于 char 类型在 Java EBCDIC 中隐式为 UTF-16,因此需要将其作为 Java 字节数组进行比较。

例子:

    Charset encoding = Charset.forName("IBM1047");
    Comparator<String> encComparator = (s1, s2) ->
            encoding.encode(s1)
                    .compareTo(encoding.encode(s2));
于 2014-07-02T07:39:32.103 回答
1

是的,有一个用于 EBCDIC 编码的比较器。这是它的代码。

`Comparator<Entity Class name> EBCDIC = new Comparator<Entity Class name>() 

     {  
        Charset encoding = Charset.forName("cp500");

   @Override         
  public int compare(Entity Class name jc1, 
       Entity Class name jc2) {             
          return (int) (encoding.encode(jc1.toString()).compareTo(encoding.encode(jc2.toString())));         
        }     
      };   
于 2017-09-27T12:39:37.897 回答