街中で見かけて「グッときた人」の思い出

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);
}



以上です。
よろしくお願いします。

A 回答 (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の関係と同様のようです。

参考URL:http://d.hatena.ne.jp/mir/searchdiary?word=*%5BJ …
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
おかげさまで、理解を得ることができました。

私は、文字コードについて、Windows環境ではShift-JISが使用されていると思っていた口なので、今回のことで大変勉強になりました。

お礼日時:2007/05/23 19:42

>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と他の文字コードとの対応の問題があって表示できないのでしょうか?


以上です。
長くなってしまい申し訳ありません。

補足日時:2007/05/22 18:27
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!