Common Lispで動くcurses (cl-charms)で日本語を出力する
cl-charmsのAPIをそのまま使うと日本語の文字列は文字化けして出力されます。 対処の方法を調べるのに時間がかかったのでここにメモ。
手元で試した限りだと、cl-charmsの処理に入る前に(cl-setlocale:set-all-to-native)
を実行しておけば大丈夫そうでした。
localeを設定すれば大丈夫というのは検索すれば出てくるのですが、Common Lispからどうやればいいのかは分からず、結局lemのコードを読んでいて見つけました。(ありがとうございます!)
以下、サンプルコードです。
charms-ja.lisp
という名前で保存し、ros -s cl-charms -s cl-setlocale -l charms-ja.lisp -e '(charms-ja:main)' -q
と打てば実行できると思います。
(defpackage :charms-ja (:use :cl) (:export :main)) (in-package :charms-ja) (defun main () (cl-setlocale:set-all-to-native) (charms:with-curses () (charms:disable-echoing) (charms:enable-raw-input :interpret-control-characters t) (charms:enable-non-blocking-mode charms:*standard-window*) (loop for c = (charms:get-char charms:*standard-window* :ignore-error t) do (progn (charms:clear-window charms:*standard-window*) (charms:write-string-at-point charms:*standard-window* "こんにちは世界" 0 0) (charms:refresh-window charms:*standard-window*) (case c ((#\q #\Q) (return)))))))