S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

EUCで機種依存文字

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	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	 

のようになってしまう(?は文字化け)。


この辺りid:mirさんが細かく検証している


■参考
eucJP-ms - 通信用語の基礎知識