私たちの要件は、EBCDIC テキストをメインフレームに送信することです。一部の漢字があるため、UTF8 形式です。では、UTF-8 文字を EBCDIC に変換する方法はありますか?
ありがとう、ラージ・モハン
ターゲット システムが IBM メインフレームまたはミッドレンジであると仮定すると、IBM CCSID に対応する CPxxxx という名前のエンコーディングとして、JVM に組み込まれているすべての EBCDIC エンコーディングが完全にサポートされます (CP はコード ページを表します)。クライアント側には必要なエンコーディング サポートがないため、ホスト側で変換を行う必要があります。
Unicode は DBCS 以上であり、既知のすべての文字をサポートしているため、複数の EBCDIC エンコーディングをターゲットにする可能性があります。そのため、これらのエンコーディングを何らかの方法で構成する可能性があります。クライアントが Unicode (UTF-8、UTF-16 など) のみを使用するようにしてください。データがホストに到着したり、ホスト システムを離れたりするときに変換が行われます。
ホスト側で翻訳を行う必要があることを除けば、仕組みは Java の翻訳と同じです。たとえば、new String(bytes,encoding) と String.getBytes(encoding)、およびさまざまな NIO とライター クラス。ISO 8859-x と Unicode、またはその他の SBCS (または限定された DBCS) の間の変換と同じです。
例えば:
byte[] ebcdta="Hello World".getBytes("CP037"); // get bytes for EBCDIC codepage 37
詳細については、IBM のドキュメント Web サイトを参照してください。
EBCDIC には多くの 8 ビット コードページがあります。それらの多くは VM でサポートされています。を見てくださいCharset.availableCharsets().keySet()
。EBCDIC ページには名前が付けられています ( でわかるように、 for のIBM...
ようなエイリアスがあります)。cp500
IBM500
Charset.forName("IBM500").aliases()
2 つの問題があります。
まず、このアプローチを見てください。次に、目的のターゲット ランタイムを試してみてください ;-)
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);
コードページ420とそれに対応するエンコーディングCP420の Java 表現を使用しました。このコードページはアラビア語のテキストに使用されるため、中国語のテキストに適したコードページを選択する必要があります。
ミッドレンジ AS/400 (最近の IBM i) の場合、最善の策は、これらすべてを透過的に (おそらくわずかに示唆されている) IBM Java Toolkit (jt400.jar) を使用することです。
Java 内では、文字は UTF-8 (エンコーディング) ではなく 16 ビット値であることに注意してください。