20

ASCIIからEBCDICに変換するために「単純な」utilを作成する必要がありますか?

AsciiはJava、Webから来ており、AS400に移行しています。私はグーグルを持っていましたが、簡単な解決策を見つけることができないようです(多分それはありません:()。私はオープンソースのutilを望んでいたか、すでに書かれているutilの代金を払っていました。

このように多分?

Converter.convertToAscii(String textFromAS400)
Converter.convertToEBCDIC(String textFromJava)

ありがとう、

スコット

4

10 に答える 10

33

Java の文字列は、Java のネイティブ エンコーディングでテキストを保持することに注意してください。ASCII または EBCDIC の「文字列」をメモリに保持する場合、文字列としてエンコードする前に、それを byte[] に格納します。

ASCII -> Java: new String(bytes, "ASCII")
EBCDIC -> Java: 新しい文字列 (バイト、"Cp1047")
Java -> ASCII: string.getBytes("ASCII")
Java -> EBCDIC: string.getBytes("Cp1047")
于 2008-12-15T23:49:20.223 に答える
11

IBM の Java ツールボックスのオープン ソース バージョンであるJTOpenには、ネイティブ AS400 テキスト ファイルにアクセスするための FileReader および FileWriter を含む、AS/400 オブジェクトにアクセスするためのクラスのコレクションがあります。これは、独自の変換クラスを作成するよりも使いやすい場合があります。

JTOpenホームページから:

JTOpen を使用してアクセスできる多くの i5/OS および OS/400 リソースのほんの一部を以下に示します。

  • データベース -- JDBC (SQL) およびレコードレベル アクセス (DDM)
  • 統合ファイル システム
  • プログラム呼び出し
  • コマンド
  • データ待ち行列
  • データ領域
  • リソースの印刷/スプール
  • 製品およびPTF情報
  • ジョブとジョブ ログ
  • メッセージ、メッセージ キュー、メッセージ ファイル
  • ユーザーとグループ
  • ユーザースペース
  • システム値
  • システムステータス
于 2008-12-15T16:58:14.547 に答える
4

Java文字セットCp1047(Java 5)またはCp500(JDK 1.3+)のいずれかを使用する必要があります。

文字列コンストラクターを使用します。String(byte[] bytes, [int offset, int length,] String enc)

于 2008-12-15T15:05:54.320 に答える
3
package javaapplication1;

import java.nio.ByteBuffer;
import java.nio.CharBuffer;

import java.nio.charset.CharacterCodingException;

import java.nio.charset.Charset;

import java.nio.charset.CharsetDecoder;

import java.nio.charset.CharsetEncoder;

public class ConvertBetweenCharacterSetEncodingsWithCharBuffer {

    public static void main(String[] args) {

       //String cadena = "@@@@@@@@@@@@@@@ñâæÃÈÄóöó@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ÔÁâãÅÙÃÁÙÄ@ÄÅÂÉã@âæÉãÃÈ@@@@@@@@";
        String cadena = "ñâæÃÈÄóöó";
        System.out.println(Convert(cadena,"CP1047","ISO-8859-1"));
        cadena = "1SWCHD363";
        System.out.println(Convert(cadena,"ISO-8859-1","CP1047"));

    }

    public static String Convert (String strToConvert,String in, String out){
       try {

        Charset charset_in = Charset.forName(out);
        Charset charset_out = Charset.forName(in);

        CharsetDecoder decoder = charset_out.newDecoder();

        CharsetEncoder encoder = charset_in.newEncoder();

        CharBuffer uCharBuffer = CharBuffer.wrap(strToConvert);

        ByteBuffer bbuf = encoder.encode(uCharBuffer);

        CharBuffer cbuf = decoder.decode(bbuf);

        String s = cbuf.toString();

        //System.out.println("Original String is: " + s);
        return s;

    } catch (CharacterCodingException e) {

        //System.out.println("Character Coding Error: " + e.getMessage());
        return "";

    }


}

}
于 2015-04-01T23:31:57.883 に答える
1

この変換テーブルを使用して、yoursefを1つ作成できます。

しかし、ここにJavaの例へのリンクがあるサイトがあります。

于 2008-12-15T15:02:45.437 に答える
0

EBCDIC文字セット用のマップとASCII文字セット用のマップを作成するのはかなり簡単で、それぞれがもう一方の文字表現を返します。次に、文字列をループして翻訳し、マップ内の各文字を検索して、出力文字列に追加します。

公に利用可能なコンバーターがあるかどうかはわかりませんが、コンバーターを作成するのに1時間ほどかかることはありません。

于 2008-12-15T15:02:03.550 に答える
0

これは私が使ってきたものです。

public static final int[] ebc2asc = new int[256];
public static final int[] asc2ebc = new int[256];

static
{
  byte[] values = new byte[256];
  for (int i = 0; i < 256; i++)
    values[i] = (byte) i;

  try
  {
    String s = new String (values, "CP1047");
    char[] chars = s.toCharArray ();
    for (int i = 0; i < 256; i++)
    {
      int val = chars[i];
      ebc2asc[i] = val;
      asc2ebc[val] = i;
    }
  }
  catch (UnsupportedEncodingException e)
  {
    e.printStackTrace ();
  }
}
于 2015-01-02T05:46:39.873 に答える