外部からの入力バイト列を文字列にしたい(文字コード変換含む)


Tags: 入出力, 日本語, jp, FIXME

外部からの入力バイト列を文字列にしたい(文字コード変換含む)

Webページを取得しページを加工することを考えてみます。 CLでは処理系依存で文字コードを指定し扱う方法がそれぞれありますが、Webページ取得の場合にはエンコードを決め打ちにしてしまうと、指定したエンコードのページしか正しく処理できないことになってしまいます。これでは、現在の日本のようにエンコードが複数使われている状況では不便です。

下記の例ではonjo氏作のjpパッケージを利用し、文字エンコーディングを自動判別してバイト列を文字列に変換しています。

jpパッケージの詳細についてはCommon Lisp と 日本語 と 文字コードを参照して下さい

(let ((vec (drakma:http-request "http://tips.lisp-users.org/common-lisp/" :force-binary T)))
  (jp:decode vec :guess))
;=> "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
;       \"http://www.w3.org/TR/html4/loose.dtd\">
; <html><head><title>逆引きCommonLisp</title
; ... "