メインフレームへのEBCDICテキストの送信が必要です。我々はいくつかの中国語の文字を持っているので、UTF8形式です。 UTF-8文字をEBCDICに変換する方法はありますか?ターゲット・システムは、IBMのメインフレームやミッドレンジであると仮定すると、JavaのUTF-8からEBCDICへ
おかげで、 ラジャモハン
メインフレームへのEBCDICテキストの送信が必要です。我々はいくつかの中国語の文字を持っているので、UTF8形式です。 UTF-8文字をEBCDICに変換する方法はありますか?ターゲット・システムは、IBMのメインフレームやミッドレンジであると仮定すると、JavaのUTF-8からEBCDICへ
おかげで、 ラジャモハン
は、それがIBM CCSIDの(CPに対応し、CPxxxxという名前のエンコーディングとしてJVMだに組み込まれたEBCDICエンコーディングのすべてを完全にサポートしていますコードページを表します)。クライアント側は必要なエンコーディングをサポートしないため、ホスト側で翻訳を行う必要があります。
UnicodeはDBCS以上であり、既知の文字をすべてサポートしているため、複数のEBCDICエンコーディングを対象とする可能性があります。これらのエンコーディングを何らかの方法で設定することになります。データのホストへの到着やホストシステムからの離脱に伴い、翻訳が完了した状態でクライアントのUnicode(UTF-8、UTF-16など)のみを使用してください。
ホスト側で翻訳する必要がある以外は、どのようなJavaの変換とも同じです。例えば新しいString(バイト、エンコーディング)、String.getBytes(エンコーディング)、およびさまざまなNIOクラスとライタークラス実際には魔法はありません。ISO 8859-xとUnicode、または他のSBCS(または限定されたDBCS)の間で翻訳することと変わりありません。
例えば:あなたはIBM's documentation websiteに関する詳細な情報を見つけることができます
byte[] ebcdta="Hello World".getBytes("CP037"); // get bytes for EBCDIC codepage 37
。
EBCDICには多くの8ビットコードページがあります。それらの多くはVMによってサポートされています。 Charset.availableCharsets().keySet()
を見ると、EBCDICページの名前はのようにIBM500
のcp500
のような別名があります。
二つの問題があります:あなたは文字がEBCDICの異なるコードページに含まれている場合
最初は、this approachをご覧ください。 2番目は、目的のランタイムを試してみてください;-)
'IBM * 'という名前の文字セットのすべてがEBCDICであるとは限りません。たとえば、[IBM850](http://en.wikipedia.org/wiki/Code_page_850)は、コマンドプロンプトで米国および西ヨーロッパのWindowsバージョンで使用される標準コードページです。 – lavinio
中規模のAS/400(最近のIBM i)のベストプラクティスは、これらのすべてを実行するIBM Java Toolkit(jt400.jar)を使用することです物事は透過的に(多少示唆されている)。
Javaの内部では、文字は16ビット値であり、UTF-8(つまりエンコード)ではありません。
いつでも、IBM Toolbox for Java(JTOpen)、特にcom.ibm.as400.access.AS400Text
クラスをjt400.jarに使用できます。
次のようにそれが行く:私は、コード・ページとエンコーディングCP420のそれに対応するJava表現を使用
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);
は、このコード・ページは、アラビア語テキストに使用されているので、あなた中国語のテキストに適したコードページを選択する必要があります。
UTF-8からEBCDICへの変換は無損失ですか?つまり、毎回同じEBCDICバイトを前後に変換できますか? –