- ベストアンサー
JAVAでのShift-JISとEUC-JP間の文字コード変換ができない
- Windows環境で作成した「Shift-JIS(CP932)」のファイルを、JAVAを使用して「EUC-JP」のファイルに変換したいのですが、NEC選定文字(13区)等の追加された機種依存文字の変換ができません。
- 文字コードの呼び方がサイトによってあいまいで、正確な情報がわかりません。
- 「Shift-JIS(CP932)」「EUC-JP」の正確な情報が記述されたサイトやJAVAにおける文字コード変換のノウハウをお持ちの方がいましたら、教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>テキストエディタで、文字コードを「EUC-JP」に設定し「丸付きの1」を記入すると、画面上で確認できてしまいます。 最近のWindowsは内部コードがUnicodeですので画面上で確認できるのは必然ではないかと。 ※画面上に出る時点ではメモリ上はUnicodeでファイルに保存する際に符号化されるはずです。 >また、バイナリエディタで作成したファイルを確認したところ、 >「0xADA1」で確認できてしまいます。 >これは、テキストエディタが勝手に「EUC-JP-ms」に変更しているのでしょうか? そうですね。EUC-JPの種類は良く知らないのですが、 WindowsのShift_JISは純粋なShift_JISではないのと同義でしょう。 >NEC&IBMのベンダ依存文字が「EUC-JP」に定義はされているけど、Windows-31j → Unicode → EUC-JPの変換時に、Unicodeと他の文字コードとの対応の問題があって表示できないのでしょうか? EUC-JPにベンダ依存文字は定義されていません。 EUC-JP-MSに定義されていてWindowsのEUCはこちらの文字セットを使っているにすぎないようです。 Javaの場合「EUC_JP_Solaris」というのがWindows-31J≧Shift_JISの関係と同様のようです。
その他の回答 (1)
>NEC選定文字(13区)等の追加された機種依存文字の変換ができません。 NEC選定文字って○付きの1とかのこと仰っていますよね。 だとすると、EUC-JP上では定義されていない文字ですので変換不可能です。 考え方としては >InputStreamReader ins = new InputStreamReader(new FileInputStream(iFile), "windows-31j"); >OutputStreamWriter outs = new OutputStreamWriter(new FileOutputStream(oFile), "euc-jp"); こちらで合っています。 これは 入力ソースはWindows-31Jとして解釈しJavaの内部コードであるUnicodeに変換。 出力ソースはJavaの内部コードであるUnicodeからEUCに変換して出力となります。 この際に、Windows-31J→Unicodeは変換可能ですが、NEC選定文字はEUC-JPに存在しないためUnicode→EUC-JPの割り当てができずに結果文字化けします。
補足
ご返答ありがとうございます。 補足(追加質問?)となります。 >NEC選定文字って○付きの1とかのこと仰っていますよね。 仰る通りのNEC&IBMのベンダ依存文字です。 >だとすると、EUC-JP上では定義されていない文字ですので変換不可能です。 テキストエディタで、文字コードを「EUC-JP」に設定し「丸付きの1」を記入すると、画面上で確認できてしまいます。 また、バイナリエディタで作成したファイルを確認したところ、 「0xADA1」で確認できてしまいます。 これは、テキストエディタが勝手に「EUC-JP-ms」に変更しているのでしょうか? (テキストエディタはNoEditorを使用し、文字コードを「EUC」に指定しました。また、NoEditorについて調べてみましたが、「EUC」に対応する文字コードの正式名称が何であるかがわかっていません。すみません・・・) NEC&IBMのベンダ依存文字が「EUC-JP」に定義はされているけど、Windows-31j → Unicode → EUC-JPの変換時に、Unicodeと他の文字コードとの対応の問題があって表示できないのでしょうか? 以上です。 長くなってしまい申し訳ありません。
お礼
お返事ありがとうございます。 おかげさまで、理解を得ることができました。 私は、文字コードについて、Windows環境ではShift-JISが使用されていると思っていた口なので、今回のことで大変勉強になりました。