Java中的UTF-8到EBCDIC

13 java unicode utf-8 ebcdic

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

谢谢,Raj Mohan

Law*_*Dol 9

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

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

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

例如:

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

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


Ahm*_*leh 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);
Run Code Online (Sandbox Code Playgroud)

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


Arn*_*ter 5

EBCDIC有许多8位代码页.其中许多都受VM支持.看一看Charset.availableCharsets().keySet(),在EBCDIC页面被命名为IBM...(有喜欢的别名cp500IBM500,你可以通过看Charset.forName("IBM500").aliases()).

有两个问题:

  1. 如果您在EBCDIC的不同代码页中包含字符,这将无济于事
  2. 我不确定,如果这些字符集在窗口外的任何虚拟机中都可用.

首先,看看这种方法.对于第二个,尝试所需的目标运行时;-)