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するコンポーネントを間違えていたというイージーミスだった。