EUCでは機種依存文字とか包含することができないと思っていたが、テキストエディタ等でIMEで入力して、文字コードをEUCに指定して保存することができる。
テキストエディタはTepaEditorを使用しているが、その保存したファイルを開く時には
Shift-JISとEUCの判別ができません。
Shift-JISで読み込みますか?(「いいえ」を選択した場合、EUCとして読み込みます。)
という確認ダイアログが表示され、「いいえ」を選択すると機種依存文字が再現されるが、「はい」を選択すると文字化けする。
これは「機種依存文字が、EUCの文字コードの中に、なんらかのルールでマッピングされている」と理解しているが、このファイルをJavaで読み込む場合、
Reader r = new InputStreamReader(new FileInputStream("hoge.txt"), "EUC_JP"); BufferedReader buf = new BufferedReader(r); String line = null; while ((line = buf.readLine()) != null) { System.out.println(line); }
とすると文字化けする。
Reader r = new InputStreamReader(new FileInputStream("hoge.txt"), "EUC_JP_Solaris");
とすることで、テキストエディタと同等に読むことができる。
ちなみに、
Reader r = new InputStreamReader(new FileInputStream("hoge.txt"), "Windows-31J");
とすると、テキストエディタの確認ダイアログで「はい」(Shift-JISで読み込む)とした場合と同じ文字化けとなった。
■参考
JAVAでのShift-JISとEUC-JP間の文字コード変換ができません - 教えて!goo
eucJP-ms
但し、?〜?や?〜?(ローマ数字大)などはOKだが、マッピングが完璧ではないらしく
― 0xA1BD U+2015 U+2015 U+2014 EM DASH 〜 0xA1C1 U+FF5E U+301C U+301C WAVE DASH ‖ 0xA1C2 U+2225 U+2016 U+2016 DOUBLE VERTICAL LINE − 0xA1DD U+FF0D U+2212 U+2212 MINUS SIGN ¢ 0xA1F1 U+FFE0 U+00A2 U+00A2 CENT SIGN £ 0xA1F2 U+2225 U+00A3 U+00A3 POUND SIGN ¬ 0xA2CC U+FFE2 U+00AC U+00AC NOT SIGN +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 8F F3F0 鄯 鄱 鄴 鄽 酈 酛 醃 醞 醬 醱 ? ? +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 8F F4A0 ? ? ? ? ? ? ? ? 釻 詝 ? № ? ? 礜 8F F4B0 ? ? 稹 穝 ? 窻 ? 筠 筭 筯 ? 粏 粠 粼 紱 絓 8F F4C0 綋 ? 繡 羑 翎 耦 胗 脘 腠 膻 ? 芿 苆 荑 莿 菪 8F F4D0 ? 蔞 蔯 ? 藋 藎 藭 蘒 蘄 ? 蘘 虗 ? 虬 蛺 蛽 8F F4E0 蟖 ? 蠆 蠊 蠐 蠔 褘 褚 褰 褲 襀 覔 觔 觥 觶 賡 8F F4F0 趯 輭 輶 轔 迤 迮 逭 邗 邙 邢 邳 郄 郗 ? 鄢
を変換すると、
? 0xA1BD U+2015 U+2015 U+2014 EM DASH ? 0xA1C1 U+FF5E U+301C U+301C WAVE DASH ? 0xA1C2 U+2225 U+2016 U+2016 DOUBLE VERTICAL LINE ? 0xA1DD U+FF0D U+2212 U+2212 MINUS SIGN ¢ 0xA1F1 U+FFE0 U+00A2 U+00A2 CENT SIGN £ 0xA1F2 U+2225 U+00A3 U+00A3 POUND SIGN ¬ 0xA2CC U+FFE2 U+00AC U+00AC NOT SIGN +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 8F F3F0 ? ? ? ? ? ? ? ? ? ? ? ? +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 8F F4A0 ? ? ? ? ? ? ? ? ? ? ? № ? ? ? 8F F4B0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 8F F4C0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 8F F4D0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 8F F4E0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 8F F4F0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
のようになってしまう(?は文字化け)。