1

マルチバイト対応の DB2 データベースにファイルをロードするために、IBM937 コード ページを使用してエンコードされた EBCDIC エンコードのファイルを UTF-8 形式に変換する必要があります。

unix recode と iconv を試しました。IBM 937 を UTF8 に変換する機能はありません。UNIXベースのシステムでそれを行うことができるこの世界のユーティリティ(java、perl、unix)を探しています。誰かがここで私を助けることができますか?

SL

4

2 に答える 2

1

ICU (International Components for Unicode) をご覧ください: http://site.icu-project.org/

IBM-937 用のコンバーターがあります: http://demo.icu-project.org/icu-bin/convexp?conv=ibm-937_P110-1999&s=ALL

CU は、成熟した、広く使用されている C/C++ および Java ライブラリのセットであり、ソフトウェア アプリケーションに Unicode およびグローバリゼーション サポートを提供します。ICU は広く移植可能であり、すべてのプラットフォームで、C/C++ と Java ソフトウェアの間でアプリケーションに同じ結果をもたらします。ICU は、商用ソフトウェアと他のオープン ソースまたはフリー ソフトウェアの両方での使用に適した非制限的なオープン ソース ライセンスの下でリリースされています。

ICU が提供するサービスのハイライトをいくつか紹介します。

  • コード ページ変換: テキスト データを Unicode およびその他のほぼすべての文字セットまたはエンコーディングとの間で変換します。ICU の変換テーブルは、IBM が何十年にもわたって収集した文字セット データに基づいており、どこからでも入手できる最も完全なものです。

  • 照合: 特定の言語、地域、または国の規則と基準に従って文字列を比較します。ICU の照合は、Unicode 照合アルゴリズムに加えて、このタイプのデータの包括的なソースである Common Locale Data Repository のロケール固有の比較規則に基づいています。

  • 書式設定: 選択したロケールの規則に従って、数値、日付、時刻、および金額を書式設定します。これには、選択した言語への月と日の名前の翻訳、適切な略語の選択、フィールドの正しい順序付けなどが含まれます。このデータも Common Locale Data Repository から取得されます。

  • 時間の計算: 従来のグレゴリオ暦以外にも、複数の種類の暦が用意されています。タイムゾーン計算 API の完全なセットが提供されます。

  • Unicode のサポート: ICU は Unicode 標準を綿密に追跡し、多くの Unicode 文字プロパティ、Unicode 正規化、大文字と小文字の折り畳み、および Unicode 標準で指定されているその他の基本的な操作のすべてに簡単にアクセスできるようにします。

  • 正規表現: ICU の正規表現は、非常に競争力のあるパフォーマンスを提供しながら、Unicode を完全にサポートします。

  • Bidi: 左から右 (英語) と右から左 (アラビア語またはヘブライ語) のデータが混在するテキストの処理をサポートします。

  • テキストの境界: テキスト範囲内の単語、文、段落の位置を特定するか、テキストを表示するときに行の折り返しに適した位置を特定します。

そして、はるかに。詳細については、ICU ユーザー ガイドを参照してください。

于 2011-03-11T19:47:44.710 に答える
0

Java は IBM937 コード ページを UTF-8 に変換できるようです。

入力形式を「cp937」と指定します。

Character and Byte Streamsに関する Oracle ページの 2 つの方法を次に示します。

static String readInput() {

    StringBuffer buffer = new StringBuffer();
    try {
        FileInputStream fis = new FileInputStream("test.txt");
        InputStreamReader isr = new InputStreamReader(fis,
                          "cp937");
        Reader in = new BufferedReader(isr);
        int ch;
        while ((ch = in.read()) > -1) {
            buffer.append((char)ch);
        }
        in.close();
        return buffer.toString();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

static void writeOutput(String str) {

    try {
        FileOutputStream fos = new FileOutputStream("test.txt");
        Writer out = new OutputStreamWriter(fos, "UTF8");
        out.write(str);
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
于 2011-03-11T19:37:42.243 に答える