以下が端的な不具合再現コード。
(import (rnrs)) (define tr (make-transcoder (utf-16-codec))) (call-with-port (open-file-input-port "utf16file.txt" (file-options) 'block tr) (lambda (in) (display (get-char in))(display (lookahead-char in)) (newline))) (call-with-port (open-file-input-port "utf16file2.txt" (file-options) 'block tr) (lambda (in) (display (get-char in))(display (lookahead-char in)) (newline)))ファイルはUTF-16である必要は無いんだけど、このコードで、2つ目のcall-with-portは変な値を返す。なぜか、Transcoderが最初にlookahead-charで読んだ文字をバッファに溜め込んでいるので、2度目はバッファから返してくる。
コードを修正、最初にBOMチェックをさせてからバッファに溜め込まないと意味がない。
直した。
おかげで、Transcoderがかなりすっきりというか、存在する意味さえ疑わしいレベルで簡素化できた。
No comments:
Post a Comment