• 締切済み

Javaの文字セット拡張

現在仕事で、IBMのDB2を使用し、データベースに登録したCP943漢字をJISに変換し、 メール本文として外部へ発信します。 変換方法:CP943→x-windows-iso2022jp(MS932ベースの拡張JIS) 問題点:「~」や「—」などいくつ文字はマッピングが不一致で化けることが発生します。 解決案として、 Javaは持っているx-windows-iso2022jpの文字とコードのマッピング表を拡張、 改造すれば、うまく表示できるではないかと考えております。 ぜひ、ご存知の方は、Javaの文字とコードのマッピング表の外字拡張方法をご教授ください。

みんなの回答

  • KSOH
  • ベストアンサー率93% (29/31)
回答No.1

CP943を検索してみると複数のコードセット間で変換を行った際に文字化けするといった情報が載っています。複数のベンダー固有のコードポイントが同一文字セットに含まれていることによる仕様であるようです。 下記ページなどをみたところこうした不都合が起こる文字が一部の特定文字であることより、そういった文字に対してだけアプリケーションで追加のコード変換を施すといった対処が記載されていました。それを参考にされたらよいのではないかと思います。 http://www-01.ibm.com/support/docview.wss?uid=jpn1J1009286 単にx-windows-iso2022jpのコードのマッピングを変更しても正しい対処とはいえず、逆にマッピングを変更してしまうと別の変換処理でまた異なる問題が生じるような気がします。

xiaoqiang_ch
質問者

お礼

早速な回答ありがとうございます。参考させていただきます。

関連するQ&A

  • JavaMail特殊文字付本文が文字化けで困ってい

    現在JavaMail(Ver1.4)+JAVA 7を使用して、あるメール配信システムを 構築しています。仕様上特殊文字を使用しなければならないので、 受信メールに特殊文字付本文が文字化けで困っています JavaMailのバッチがIBMのUNIX系AIXサーバ(文字コードがCP943C) に置いて、起動する メール本文データがIBMのDB2(文字コードがCP943C)から取得し、 Stringのhonbun_DB変数にいれる。 メール送信の本文が String honbun = new String(honbun_DB.getBytes("ISO-2022-JP"),"ISO-2022-JP") msg.setText(honbun,"ISO-2022-JP"); メールのヘッダーが msg.setHeader("Content-Type", "text/plain; charset="+"ISO-2022-JP"); msg.setHeader("Content-Transfer-Encoding", "7bit"); 問題点: getBytesでISO-2022-JP範囲外文字(いわゆる機種依存文字)すべて?に 置き返されます。 送信メールに、(1)(株)といった機種依存文字、NEC拡張外字が入っている 場合、文字が化けます。 ネットで得た対策方法について、以下方法が試しました。 対策1: Javaの起動オプション-Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP付ける こちらのオプションがoracle者のJVMの有効で、現在のシステムがIBMのJVMを使用して いるので、効かないです。 対策2: 本文がshift-jisにする手もありますが、APPLE社のMAC、iphone端末で、同様に 機種依存文字が化けます。 対策3: String honbun = new String(honbun_DB.getBytes("ISO-2022-JP"),"ISO-2022-JP") の代わりに、getBytes()使用せずに、独自のCP943Cの文字コードからISO-2022-JP の文字コードに変換するロジックを組むという提案(機種依存文字でも、getBytes()みたいの ?に置き換えではなく、JIS範囲コードに変換)もあった。品質の懸念があるため、採用難しいところ。 上記対策1,2、3以外の方法があれば、教えていただけると助かります。 例えば対策3の機種依存文字か、ISO-2022-JP範囲内文字か、すべてJISコードに変換できる ライブラリなど 長文となって申し訳ありません。

  • JAVAでのShift-JISとEUC-JP間の文字コード変換ができません

    Windows環境で作成した「Shift-JIS(CP932)」のファイルを、 JAVAを使用して「EUC-JP」のファイルに変換したいのですが、 NEC選定文字(13区)等の追加された機種依存文字の変換ができません。 いろいろ調べてみたのですが、 文字コードの呼び方がサイトによってあいまいで、 どのページが正しいのかがわかりません。 ・「Shift-JIS(CP932)」「EUC-JP」の正確な情報が記述されたサイト ・JAVAにおける文字コードの変換のノウハウ に関しての知識をお持ちの方がいましたら、教えてください。 以下は変換に使用したJAVAのソースコードです。 InputStreamReader ins = new InputStreamReader(new FileInputStream(iFile), "windows-31j"); OutputStreamWriter outs = new OutputStreamWriter(new FileOutputStream(oFile), "euc-jp"); int c; while ((c = in.read()) != -1) { out.write(c); } 以上です。 よろしくお願いします。

    • ベストアンサー
    • Java
  • JavaのStringクラスに「外字」という概念はある?

     今、客先のデータをJavaで処理しようとしているのですが、そのデータ(Shift-JISの文字列データ)には、今まで使われてきた「外字」が含まれています。  私の知っている範囲では、Shift-JISの文字列でも、Javaで読み込んだら内部的にUnicodeに変換されるのではないかと思っているのですが(←間違っているかもしれません)、そのUnicode変換の際に外字の部分はどうなってしまうのでしょうか。また、Unicodeに変換された文字列を、出力の際にまたShift-JISに戻すことになると思うのですが、そのときにはちゃんと以前の外字コードに戻ってくれることが保証されているのでしょうか。  JavaのリファレンスでStringクラスのページで「外字」という文字列で検索してみたのですが、まったくひっかからなかったので不安になっています。  よろしくお願い致します。

    • ベストアンサー
    • Java
  • javaの文字コード変換について

    javaの文字コード変換についての質問ですが 1 shift_jis → jis83 → jis78 2 jis78 → jis83 → shift_jis と変換をかけたいと思っていますがどのようにすれ ばいいのでしょうか? String str = new String( "hogehoge", "XXX" ); でコンストラクタの2つめの引数に変換をかけたい 文字コードの指定をすればうまくいくのでしょうか? もしそうならなんと指定すればいいのでしょうか? 以上よろしくお願いします

    • ベストアンサー
    • Java
  • 文字コードについて

    入力する文字をEBCDICコードで入力したいのですが、IBMなどの大型機?などを使わないとダメなのでしょうか? WINDOWSで入力して(S-JISコード)あとで変換することもできそうなのですが.... その時使う変換ソフトは100%信頼できるのでしょうか(外字などの対処は)? 同様にJIPS-Eコードについてもおしえてほしいのですが....

  • JAVA 文字コード変換

    こんにちは。 JAVAの文字コード変換のところで教えて頂きたい所があります。 はしご高(髙)  の文字をUTF-8からJISコードに変換してテキストファイルに書き込んでいるのですが、文字化けして"?"という文字になっています。 "髙"の文字をUTF-8からJISコードに変換の仕方のコーディング方法を教えて頂けないでしょうか。 現在下記の様に変換を行って書き込んでいます。  String str = "髙";  byte[] buf = str.substring(0, 1).getBytes("JIS0208"); OS:WindowsXP DB:Oracle10g  宜しくお願い致しますm(__)m

    • ベストアンサー
    • Java
  • Javaで、画面入力したデータをファイルに書き出すプログラムを作成して

    Javaで、画面入力したデータをファイルに書き出すプログラムを作成しています。 書き出したファイルを他のシステムへ渡す為、漢字コードの取り扱いについて調査しています。 MS932では、ローマ数字等はNEC拡張文字とIBM拡張文字の領域に別々にコード番号があります。 MS-IMEでWindows上でローマ数字を打つとNEC拡張文字で入力され、Javaのプログラムが入力を受け取ると内部で自動的にUnicodeへ変換されて、NEC拡張文字とIBM拡張文字区別無く同一のコードになります。 質問1:その後、Javaプログラムでファイルに"Windows-31J"指定で出力する場合、NEC拡張文字とIBM拡張文字のどちらで出力されるのでしょうか。 質問2:ファイルへ出力する時に、NEC拡張文字やIBM拡張文字を指定することはできるのでしょうか。 よろしくお願いいたします。 余談ですが、インターネット上には「NEC拡張文字」という言葉の他に、「NEC選定文字」や「NEC特殊文字」などの書き方があって同じものを指すのか別の物を指すのか、初心者としてはわかりにくく迷わされるところです。

    • ベストアンサー
    • Java
  • IBM外字のShift-JISコード

    こんにちは、いつもお世話になっております。 JIS90およびNEC特殊文字、IBM拡張文字、NEC選定IBM拡張文字のみ許容しているシステムに対して、外字データの納品を行うことになりました。 BM拡張文字、NEC選定IBM拡張文字の一部は重複していますが、WinXPで入力した場合、 どちらの文字コード(Shift-JIS)で出力されるのでしょうか? Webで調べてみると、「昮」の文字がIBM外字:FAC4とNEC選定IBM拡張:EDA8で出てきますが、 別のサイトではFAD2とありました。 調べれば調べるほどわからなくなってしまったので、識者の皆様ご教示ください。 宜しくお願い致します。

  • javaの文字コード変換表はどこに保存されているの?

    javaの文字コード変換表はどこに保存されているの? SunのJavaの文字コード変換表はどこに保存されているのでしょうか?書き換えたいんですが、SunのJVMはオープンソースなので書き換え可能ですよね?

    • ベストアンサー
    • Java
  • Javaで割り当てられていない文字コードを判別

    javaで文字をDrawStringする際に描画対象の文字コードに対して文字が割り当てられていないコードだった場合に特定の文字に置き換える処理を作りたいのですが、その判別方法が分かりません。 外字も対象範囲なのですが、外字登録されているものされていないものを判別しなければいけません。 文字コードはUTF-8です。 どなたかご教授のほど宜しく御願いします。

専門家に質問してみよう