16

我们的要求是将 EBCDIC 文本发送到大型机。我们有一些汉字,因此是 UTF8 格式。那么,有没有办法将 UTF-8 字符转换为 EBCDIC?

谢谢,拉杰莫汉

4

4 回答 4

10

假设您的目标系统是 IBM 大型机或中型机,它完全支持其 JVM 中内置的所有 EBCDIC 编码,即名为 CPxxxx 的编码,对应于 IBM CCSID(CP 代表代码页)。您需要在主机端进行翻译,因为客户端没有必要的编码支持。

由于 Unicode 是 DBCS 和更高版本,并且支持每个已知字符,因此您可能会针对多个 EBCDIC 编码;所以你可能会以某种方式配置这些编码。尝试让您的客户端仅使用 Unicode(UTF-8、UTF-16 等),并在数据到达主机和/或离开主机系统时完成翻译。

除了需要在主机端进行翻译外,其机制与任何 Java 翻译相同;例如 new String(bytes,encoding) 和 String.getBytes(encoding),以及各种 NIO 和 writer 类。真的没有什么神奇之处——这与在 ISO 8859-x 和 Unicode 或任何其他 SBCS(或有限的 DBCS)之间进行转换没有什么不同。

例如:

byte[] ebcdta="Hello World".getBytes("CP037");  // get bytes for EBCDIC codepage 37

您可以在IBM 的文档网站上找到更多信息。

于 2009-04-21T06:49:06.013 回答
6

您始终可以使用 IBM Toolbox for Java ( JTOpen ),特别com.ibm.as400.access.AS400Text是 jt400.jar 中的类。

它是这样的:

int codePageNumber = 420;
String codePage = "CP420";
String sourceUtfText = "أحمد يوسف صالح";

AS400Text converter = new AS400Text(sourceUtfText.length(), codePageNumber);
byte[] bytesData = converter.toBytes(sourceUtfText);
String resultedEbcdicText = new String(bytesData, codePage);

我使用了编码CP420的代码页420及其对应的 java 表示,该代码页用于阿拉伯文本,因此,您应该为中文文本选择合适的代码页。

于 2009-08-17T07:11:54.273 回答
6

EBCDIC 有许多 8 位代码页。VM 支持它们中的许多。看一下Charset.availableCharsets().keySet(),EBCDIC 页面被命名IBM...(有别名cp500IBM500如您所见Charset.forName("IBM500").aliases())。

有两个问题:

  1. 如果您在 EBCDIC 的不同代码页中包含字符,这将无济于事
  2. 我不确定这些字符集是否在 Windows 外的任何 vm 中可用。

首先,看看这种方法。其次,尝试所需的目标运行时 ;-)

于 2009-04-21T07:23:32.547 回答
2

对于中端 AS/400(这些天是 IBM i),最好的选择是使用 IBM Java Toolkit (jt400.jar),它透明地完成所有这些事情(可能略有暗示)。

请注意,在 Java 中,字符是 16 位值,而不是 UTF-8(即编码)。

于 2009-04-21T14:27:39.950 回答