2つ前の記事では、ScalaプログラムからShift_JIS-2004のテキストデータを読み込んでUTF-8にして出力してみました。これで、Shift_JIS-2004を読み込めることが分かったわけです。
では、Shift_JIS-2004で出力する方はどうか。おそらく問題ないのでしょうけど、一応やってみないことには、どんな落とし穴があるか分かりません。
文字コードとしてShift_JIS-2004を指定してファイルを読み込むよう開き、1行読み込んではまたShift_JIS-2004として別のファイルに書き出してみます。内部コードがUnicodeなので、いったんUnicodeに変換したのちに元のSJISにするということになります。往復変換 (round-trip conversion) がうまくいくかを見たいわけです。
import scala.io.Source import java.io.PrintWriter val inputFile = Source.fromFile("hoge.sjis.txt", "x-SJIS_0213") val outputFile = new PrintWriter("hoge-out.sjis.txt", "x-SJIS_0213") try { for (line <- inputFile.getLines) { outputFile.println(line) } } finally { inputFile.close outputFile.close }
今回は前回と違って行番号なしで、元のまま出力します。これを実行した後で、
diff hoge.sjis.txt hoge-out.sjis.txt
とすると、差分なし、つまり綺麗に元通りに戻ったということでした。
念のため、常用漢字と人名用漢字のCSVのSJIS版について同じことをして、うまくいくことを確認しました。
全部の文字を試したわけではないけれども、問題の起こりそうなポイントはおさえているので、多分大丈夫でないかと思います。
ちなみに、Shift_JIS-2004に対応している言語はほかにはPythonやGaucheがあります。これらはEUC-JIS-2004にも対応しています。また、OSでいうとMac OS XはShift_JIS-2004に対応しており、OS添付のテキストエディタでも扱うことができます。
コメントする