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);
}
以上です。
よろしくお願いします。
No.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 …
お返事ありがとうございます。
おかげさまで、理解を得ることができました。
私は、文字コードについて、Windows環境ではShift-JISが使用されていると思っていた口なので、今回のことで大変勉強になりました。
No.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と他の文字コードとの対応の問題があって表示できないのでしょうか?
以上です。
長くなってしまい申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダブルクォーテーションのrepla...
-
javaで質問です。 文字列2023/2...
-
DBから取得したデータの文字化け
-
Path型をString型へ変換する(Java)
-
byte[] を long,float とかに...
-
JIS8の半角かな文字をUnicodeの...
-
【再質問】Accessのコンボボッ...
-
error C2440: 'static_cast' : ...
-
byte型のマイナスの扱いについて
-
文字変換?
-
テキストファイルの文字コードM...
-
JavaのStringクラスに「外字」...
-
カタカナをローマジに変換する。
-
エクセルVBAで「〜」が表現でき...
-
文字列の比較
-
javascriptで文字列のsjis利用...
-
全角英数字とハイフンを半角に...
-
cookie から取り出すと文字化け
-
C言語32bitから64bitの移行につ...
-
ループ処理の際、最後だけ","を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javaで質問です。 文字列2023/2...
-
ダブルクォーテーションのrepla...
-
Path型をString型へ変換する(Java)
-
int型のゼロ埋め
-
javascriptで文字列のsjis利用...
-
Visual Basic でのコードをASCI...
-
JavaのStringクラスに「外字」...
-
カタカナをローマジに変換する。
-
C言語32bitから64bitの移行につ...
-
UTF-8とUnicodeの互換性
-
COBOLで半角カナを全角カナに変換
-
文字列の比較
-
byte[] を long,float とかに...
-
全角英数字とハイフンを半角に...
-
byte型のマイナスの扱いについて
-
TEXTAREAからのデータを改行入...
-
javaの初歩的な質問です。
-
エクセルVBAで「〜」が表現でき...
-
DBから取得したデータの文字化け
-
[Javascript]エンターキー押下...
おすすめ情報