#こんにちは。Common lisp users jpから来ました。初心者です。
#質問させて下さい。「実践Commonlisp」を見ながら進めているのですが、p25の「3.5データベースの保存と読み出し」で日本語を保存した後、読みだす時に文字化けをするのですが、何か対処方法はありますでしょうか?付録Aの日本語処理を見ながら進めても返される文字は化けてしまっています。環境はWindows7 64bit/Lispbox for Windows( ttp://common-lisp.net/project/lispbox/)/日本語化( ttp://t2ru.hatenablog.jp/entry/20080903/1220471802)でのコードは入力しています。
#Lispの処理系自体は何でしょう? そのリンク先の設定そのままならClozure CL?
#『実践Common Lisp』の付録AだとClozure CLについての記述はありませんよね。
##clozureclはOSの言語ロケールによってデフォルトのexternal-formatを切り替えてくれるのでcp932を捨てた日本語windows使いにとっては微妙な挙動が偶に観測される印象があります。全てのwith-open-fileにexternal-formatを指定すると解決すると思います。
#日本語windows環境が今手元になくて印象を語っております。すみません…
#返信ありがとうございます。目的は「エキスパートシステム」の様に、外部からの入力に対して、対応する文章を提示する基礎的な推論エンジンを作ることです。そうです。ClozureCLなのですが、そもそも設定を変更できるのでしょうか?CLISPであれば、まだ本の通りに進めるのですが・・。現在は、本を見ながらそのまま打って理解を深めていくという形で基礎的な所から進んでいる状態です。
#実践Commonlispの本を見ながらsave-db、load-dbを入力しています。
(defun save-db (filename)
(with-open-file (out filename
:direction :output
:if-exists :supersede :external-format :utf-8)
(with-standard-io-syntax
(print *db* out))))
(defun load-db(filename)
(with-open-file (in filename)
(with-standard-io-syntax
(setf *db* (read in)))))
load-dbにexternal-formatを指定するとなると、以下の様な場所になるのでしょうか?
(defun load-db(filename)
(with-open-file (in filename
:external-format :utf-8)
(with-standard-io-syntax
(setf *db* (read in)))))
#引数指定の場所としては大丈夫だと思います":utf-8"で大丈夫かどうかは処理系依存でccl今インストール中なので確信はないですが試してみても大丈夫ではないでしょうか…
#その前に文字化けするlispから出力されているDB自体の文字コードは何になっていますでしょうか?
#ありがとうございます。試してみます。
#もともとの文字コードなのですが、上記にあったload-dbをそのまま使用したので、文字化けをしたという事くらいしか分からないのですが、それはどのようにして調べる事ができるのでしょうか?素人質問ですいません。
#文字コードの表示が出るエディタで開いてみるとかでしょうか?
#osxで試した感じで大丈夫そうでした-> :utf-8
#保存した状態ファイルを開いて名前を付けて保存で、utf-8になっていました。
#今からloadしてみます。
#あ、できましたー!!shiroさん、snmstsさんありがとうございました!!
#load-dbにexternal-formatの指定がなかったのがまずかったという事ですね。勉強になりました。
#入力/出力の片方だけ指定というのは駄目かも感でますね。
#2週間ずっと失敗を繰り返していたのですが、これで知識ベースの方の作成が大幅に進みます。もしまた分からない所があれば質問させていただきます。本当にありがとうございました。