【问题标题】:How do I do ASCII to EBCDIC translation in Ruby?如何在 Ruby 中进行 ASCII 到 EBCDIC 的转换?
【发布时间】:2015-01-13 23:58:21
【问题描述】:

我在 Mac OS X 上使用 Ruby 1.8.7。

如何将 ASCII 转换为 EBCDIC 编码,以便与旧系统进行通信。 我必须使用 jruby 吗?

【问题讨论】:

  • 第一个建议是使用iconv,除了iconv 似乎不支持EBCDIC;这是多年来一直存在的问题。 :-/
  • @Mark 为什么这个问题让你头疼?
  • 技术的并列太激进了。我当然是在开玩笑。
  • EBCDIC?现在有一个我很久很久没听过的首字母缩略词了。

标签: ruby encoding jruby ebcdic


【解决方案1】:

您可以升级,但这不一定能解决问题。

EBCDIC 有多种风格(感谢 IBM!),因此您需要确定大型机使用的子集。

多年前,我在大型机上编程时学到的一件事就是打电话给一些大型机管理员,让他们动脑筋。他们整天都在处理从其他代码集到 EBCDIC 的转换,并且可能有一个可以即时完成的工具。

另一种方法是看看他们是否有可以解析 JSON 或 YAML 的东西。将您的文本转换为 UTF-8,将其发送到大型机,让其翻译器从 UTF-8 转换为 EBCDIC。

【讨论】:

  • 阿门“(感谢 IBM!)”。如果没有 IBM 开发 EBCDIC 的工作和经验,我们可能会被其当代 7 位 ASCII 卡住不知道多久。这段经历帮助他们从组织成立之初就为 Unicode 联盟做出了贡献。我们今天的情况可能会更糟。但你是对的;可能有必要识别相关大型机用户的 EBCDIC CCSID,即使没有必要也是一件好事。 (虽然它可能不是“大型机”,但这个想法仍然适用。)如果不是,UTF-8 是一个很好的中介。
  • 在 python 中它就像 "123".decode("UTF-8").encode("IBM500") 或任何你需要的风格一样简单,通常是 037, 500 International 因为它而流行DB2 unicode 支持被广泛接受。那么为什么这不在 ruby​​ 的 Encoding.aliases 中呢?
【解决方案2】:

您应该使用 Ruby iconv library(适用于 Ruby 2.0 之前的版本)或 iconv gem(适用于 Ruby 2+)指定 EBCDIC-US 作为代码集:

irb(main):001:0> require('iconv')
=> true
irb(main):002:0> x=Iconv.new('EBCDIC-US','ASCII')
=> #<Iconv:0x7fb4274d88d8>
irb(main):003:0> x.iconv("foo")
=> "\206\226\226"

【讨论】:

  • 我似乎得到了 "Iconv::InvalidEncoding: invalid encoding ("ascii", "EBCDIC-US")" 。在 OSX 上
  • 你能找出你使用的是什么版本的iconv吗?
  • 我使用的是 1.11。看来需要升级了
  • 嗯,EBCDIC 支持可能只在 Linux 的 glibc 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多