kiyo_hikoのブログ

メモ+日記?

Javaでクイズ暗記ツール作成(9) UTF-8/BOMの問題

前回のエラーを調査した。メモ:

問題ファイルの先頭がうまく読み込めなかった

とりあえず別の処理系でも読んでみて変なデータとか混じってないかと思ってSBCLでみたら何かいた。

* (with-open-file (
    f
    "paneru.txt"
    :direction :input
    :external-format :utf-8)
   (loop for line = (read-line f nil)
         while line do (format t "~a~%" line)))
?{ ; ←これ
NASAの無人探査機ディープ・インパクトが2005年7月にデータを収集した太陽を周回する彗星の名前は?
----
テンペル
ベエゲマオタ
}

google:UTF ファイル 先頭などでGoogle先生に伺ったら、UTFのBOMらしいのでBOMなしに変更。参考にさせて頂いたのが以下:

UTF-8には、規格策定者の迷いのため 一時期、先頭に3バイトのBOMと呼ばれる、バイト並び識別マーク を置く仕様がありました。
現在はBOMはまず使われることはありませんが、Windows付属の「メモ帳」という 簡易エディタでUTF-8ファイルをうっかり作成してしまうと、ファイル先頭に BOMが付いてしまいます。

残念なことにJavaではBOM付きのUTF-8ファイルをまともに 読むことができません。

JavaでUTF-8のBOMに対処する: 万象酔歩

対策はのちほどやっておこう。


問題読み込み時の再描画はremoveするコンポーネントを間違えていたというイージーミスだった。