Scala と Java 7 で Shift_JIS-2004を読む

| コメント(0) | トラックバック(0)

Java 7ではShift_JIS-2004への対応が追加されています(OracleのサイトのSupported Encodings参照)。前から気付いてはいたのですが、今まで何となく試す機会がないままいました。

文字コードの名前として "x-SJIS_0213" という文字列で登録されています。文字コードを指定できる場面でこの文字列を指定してやればOKです。ご承知のようにJavaの内部コードはUnicodeなので、この場合の対応というのはUnicodeとのコード変換が実装されているということです。

Javaで対応したということは、Scalaでも使えるんだろうと思って、Scalaで簡単なプログラムを書いて試してみました。

// ファイルからテキストを読み込んで別のファイルに行番号をつけて出力する
import scala.io.Source
import java.io.PrintWriter

val inputFile = Source.fromFile("hoge.sjis.txt", "x-SJIS_0213")
val outputFile = new PrintWriter("hoge-out.utf8.txt", "UTF-8")

try {
    var i = 1
    for (line <- inputFile.getLines) {
        outputFile.println(i + ": " + line)
	i += 1
    }
} finally {
    inputFile.close
    outputFile.close
}

hoge.sjis.txtという名前のShift_JIS-2004のファイルを読み込んで、行番号をつけた上でUTF-8にしてhoge-out.utf8.txtというファイルに出力します。

試しに作ったhoge.sjis.txtを同じディレクトリに置いておいて scalaコマンドで上のプログラムを実行すると、hoge-out.utf8.txtが作成されます。Scala 2.10.0とOpenJDK 1.7.0をインストールしたUbuntu Linux 12.10で試しています。

出力ファイルを見たところでは期待通りに動作しているようです。以下のようなファイルができます。

1: test file.
2: あいう
3: αβ
4: 鷗     # 第3水準、BMP、一般名詞
5: 米芾   # 第3水準、BMP、人名
6: 褚遂良 # 第3水準、BMP、人名
7: 蔡邕   # 第3水準、BMP、人名
8: 𩸽  # 第4水準、SIP、一般名詞
9: 渞  # 第4水準、BMP、名字
10: 氵  # 第4水準、BMP、字体記述要素
11: 剝離  # 第3水準、BMP、サ変名詞、JIS2004追加、常用漢字
12: 𠮟咤  # 第3水準、SIP、サ変名詞、JIS2004追加、常用漢字
13: 神  # 第3水準、BMP、互換漢字
14: ㇰ  # アイヌ語用片仮名
15: ㇷ゚  # アイヌ語用片仮名、要結合文字
16: 〜  # WAVE DASH U+301C

なお、Java 6でも、途中のUpdateから対応しています。現時点の最新版では使えるはずです。

個人的には、JIS X 0213の符号化方式としてはEUC-JIS-2004に対応してくれた方が嬉しいのですが、SJISももちろん必要な措置ではあります。

トラックバック(0)

トラックバックURL: http://yanok.net/yanok/mt-tb.cgi/450

コメントする

最近のブログ記事

仮名合字・合略仮名の文字コード
合字とは 合字というものがあります。複数…
なぜ『プログラマのための文字コード技術入門』の改訂新版にはSKKと Emacsの話が入っていないのか
拙著『[改訂新版] プログラマのための文…
朝鮮半島の訃報の第3水準漢字
朝鮮戦争で韓国軍として活躍した白善燁氏が…
テレワークの環境改善〜CO2濃度をチェックする
テレワークの問題点 新型コロナウイルスの…
エンジニアHubにて「文字コード再入門─ Unicodeでのサロゲートペア、結合文字、正規化、書記素クラスタを理解しよう!」公開
「エンジニアHub」にて記事を執筆しまし…

広告