Windowsのコードページを返す関数
(use gauche.process)
(define current-code-page
(let1 cp #f
(lambda ()
(unless cp
(set! cp ((#/: (\d+)$/ (process-output->string '(chcp))) 1)))
cp)))
備忘録とチラシの裏を兼ねる
(use gauche.process)
(define current-code-page
(let1 cp #f
(lambda ()
(unless cp
(set! cp ((#/: (\d+)$/ (process-output->string '(chcp))) 1)))
cp)))
;; pathに不完全文字列になるエントリがあるとエラー
(directory-list path)
;; 低レベルならエラーになる処理は含まれない
(sys-readdir path)
Gaucheのfile.utilは0.8.14の現時点では、パスがASCII以外でエンコードされているケースを考慮してないので、CP932などでエンコードされたパスを処理する場合、エラーになることがある。具体的には、パスにGaucheの内部エンコードで許されないバイト表現が含まれる場合。パスは不完全文字列として処理されるけど、不完全文字列には許されない処理をfile.utilの各関数内部でしているため、エラーになる。
他の人が原因を見つけてそうだな、と思いながらも、コードを読んで原因を見つけたところで、やっぱり他の人が原因を見つけていたのを知った。Gauche-devel-jpメーリングリストの「パス名での不完全文字列の扱い」というメールに詳しい。徒労だ。