「ほっ」と。キャンペーン

<   2007年 07月 ( 2 )   > この月の画像一覧

読んだ本について色々

最近あんまり読書の感想は書かないのだけど、
ちょっと書きたくなったので。

ダン・シモンズ「エンディミオン」を図書館に予約しているのだが、
それまで読む本がなくなってしまったので、
棚を見ていて目に付いたものを借りてみた。

・島田裕巳「相性が悪い!」
相性は兄弟姉妹のうちどの立ち位置だったかに依存する面があるという話。
例えば第一子と末っ子は相性が良い、とか。
間違いじゃないかもしれないけれど、本当でもない感じ。
統計的な裏づけはほとんどないので、ともすればトンデモ本。
新書だからと真面目な気分で読むと腹が立つ。
所詮新書だからと気楽な気分で「あははははは」と読むべきかね。
お金を出して買うほどではないと思った。

・酒井順子「負け犬の遠吠え」
そういえば読んでなかった。
今頃読んでるって周回遅れ感(笑)
酒井の文体は、常体と敬体が混在していて、読みづらくて好きではない。
なんだけど、よく書けてるなぁと思う。
私は既婚なので、厳密には負け犬ではないかもしれないが、
首肯する部分が多すぎて、基本的に負け犬体質なんだと再認識した。
特に「産んでない子の年齢は数えるな」とか。
実はよく数えちゃうんだよねー、これが(笑)
装丁は佐藤カシワ(字が分からない)なのか。
さすがだな。
装丁としては鈴木成一の方が好きだけどね。

・清水義範「『大人』がいない…」
私は作家で読む。
しかしその作家はそんなに多くない。
数少ない、「作家で読む」の作家の一人が清水義範だ。
多分結構好きだ。
この本を手に取ったのも、著者が清水だからだ。
でもこの本は清水の説教系の本の中では一番好きでない。
本人が「子ども文化」に納得できていない(あまり好きでない?)のだなーとか、
2ちゃんねるで叩かれたのがショックだったのだなーとか、
彼個人の色々が見えてしまって、視点が偏っている感じがする。
まぁ本なんて主観のカタマリだから、
真に偏りのない視点なんて無理なんだけどねー。
しかし、彼は、彼の言うところの「子ども文化」を、分かっていなさ過ぎ。
私がオタクだからそう思うんだろうな。
偏りつつも、なるべく客観を心がけていて、
中島義道的説教に陥っていないところは、さすがと思う。
彼の意見に納得できないところが多いものの、
社会を構成する一員として、私もこういう姿勢でありたいと思う。

…関連して…

2ちゃんで作家が叩かれたとき、対抗策はないのか、と考えて、
栗本のことを思い出した。
何千円も出して舞台を見に来てくれた客ならともかく、
たった数百円の本買ったくらいで、内容にケチつけるな、みたいなことを
HPに載せていたらしい。
なるほど、こういう対抗策もあるのか。
良いか悪いかは別として(笑)
子どもに対抗するなら子どもでってことかね。

で、清水は2ちゃんでの自分の作品のあまりの叩かれっぷりに、
全部読めずに画面を閉じてしまったらしい。
2ちゃんに慣れていないせいで、過剰反応してしまったのではないかと思う。
かなり強い口調で、ひどいことを書いている人も多い。
しかし、(あまり良くないことなのかもしれないが)心情的には、
書いている本人は、それほど強い思いを持っているわけではないと思う。
その強い口調自体が、2ちゃんの流儀というか。
礼節を重んじてオブラートにくるんで感想を書く場じゃなくて、
強い口調で書く場なのだと思う。
それを知らないと、かなりショックを受けるだろうなぁと思う。
清水は礼節を持って感想を書く世代で、
そういう生活をしてきた人で、そういう人物なのだろうから、
ますますショックだったのかな、と。

今までは、本に挟まった「読者カード」葉書みたいなものでしか
読者のダイレクトな感想を知り得なかった。
その内容は、よほどムカついた人でなければ、
「大変良かったです」という好意的なものが多かったのではないかと思う。
清水の本にもある「清水終わったな」みたいな感想は、
わざわざ「読者カード」葉書では送らないだろう。
それが、読者が気軽に感想を表現できる場ができてしまい、
著者もそれを読むことができるようになってしまった。
清水は、そんな状況に戸惑っているのではないか、という感じがした。
IT系になじみのない著述業の人には、
そういう人が多いんじゃないかと思う。
HPを持ってITになじんでいると思われる栗本でさえ、
過剰反応して前述のようなびっくり意見を書くくらいである。
ま、彼女に関して言えば、
IT系になじみが深いものの、
パソ通時代のシンパお取り巻き状態に慣れてしまって、
自分の世の評価はそういうものと思ってしまっているんじゃないかなーと
いう気もするんだけどさ。

だから2ちゃんの口調に慣れろというのじゃないけど、
ああいうのにびっくりしている著述業な人には、
そんなに過剰反応しなくてもいいと思いますよーと言いたい。
どうせ便所の落書きだし、どうせチラシの裏だからね(笑)
というか、以前何かの記事にも書いたけれど、
1/3は味方で、1/3は敵で、1/3は中立である。
大絶賛してくれる人と同数程度には、
大酷評(?)している人がいると覚悟していても良いんじゃないか。
[PR]
by xiaoxia | 2007-07-24 17:57 | 読む | Comments(2)
php で文字コード変換のエラーを拾いたい、という話。
ありていに言うと、webページはUTF-8だけど、
DB が euc-jp なので、
euc-jp でない入力は事前にチェックしたいのねん。
で、こんなテストを書いてみた。

UTF-8 では表示できる簡体字を入力にして、
EUC-JP に変換して、ありゃ失敗だよ、とやりたい。
「書」も「芸」も、簡体字は日本語にない文字なので、こんな風に書いてみる
(例えば「機」の簡体字は「机」なので日本語にある)。
$str = "\xE4\xB9\xA6"; // 「書」の簡体字(UTF-8)
$str = "\xE8\x89\xBA"; // 「芸」の簡体字(UTF-8)

$str2 = FALSE;
try {
 $str2 = mb_convert_encoding($str, 'EUC-JP', 'UTF-8'); // UTF-8 -> EUC-JP
} catch {
 echo 'ERROR';
}
echo $str2 == FALSE ? 'ERROR' : 'TRUE';

困ったことに、これでは TRUE が返る。
mb_convert_encoding は例外も出さないし、エラーも出さないし、
無理やり変換してくれる。
ちなみに変換結果は「??」になる。
化けてるんじゃなくて、本当に「?」が2つという、
なんなんだよそれwww!という動作。

次に iconv を試してみる。
上記の mb_convert_encoding の部分をこんな風に書き換える。
$str2 = iconv("UTF-8", "EUC-JP", $str);

ちなみにこちらも、コマンドラインに Notice は出すものの、
例外もエラーも出さない。
この場合は、$str2 が FALSE になる。
しかし、入力文字列がもっと長くて、途中まで変換できちゃった場合には、
変換できたところまでが $str2 に入ってしまうようなので、
$str2 == FALSE という判断ができない。
変換後と変換前とで、長さを比べることもできないしなぁ
(変換に成功すると UTF-8 の方が長くなる)。

成否判定部分を perl みたいに書いてみたりもしたのだが。
// (ASCII | 半角カナ | 3バイト | 2バイト)+
$eucjp = "/^([\x00-\x7F]|\x8E[\xA0-\xDF]|\x8F[\xA1-\xFE][\xA1-\xFE]|[\xA1-\xFE][\xA1-\xFE])+$/";
echo (preg_match($eucjp, $str2) != 0) ? TRUE : FALSE;

これだと、EUC-JP の文字でも FALSE が返ってしまう。
正規表現間違ってないよね?

iconv が吐いた字をファイルに落としてみたら、
簡体字がちゃんと GB2312 に変換されていた。
気利かせすぎ!
EUC-JP にならないなら、素直に諦めてくれて良いんだってば!

困ったなぁ。
みんなはどうしてるんだろう???


追記:
コメントにて、解決方法のご提案を頂きました。

★方法1:mb_check_encoding を使う
PHP: mb_check_encoding - Manual
上記マニュアルによると、
バイトストリームが指定したエンコーディングで有効なものかどうかを調べます
とあります。
残念ながら、これは今回の目的には合致しません。
今回の困っている点は、
・mb_convert_encoding では、変換結果にホントに「??」という文字列を出してくる
・iconv では、文字コード変換を途中までちゃんとやってくれる
なのですが、これで出力された文字列は euc-jp で有効なので、
変換に失敗したかどうかはわかりません。
でも使えそうな関数なので、
覚えて置いて損はないなぁと思いました。

★方法2:可逆かどうかで判断
utf-8 → euc-jp へ変換し、
変換後の文字列を
euc-jp → utf-8 へ変換し、
最初と最後が同じか、比較する、というものです。
なるほど、これならちゃんと FALSE が返ります。
すごく効率的!という感じはちょっと減りますが、確実な感じはしますね。

★方法3:mb_detect_encoding を使う
mitsukenさんからこの関数は如何でしょう?とご提案を頂きました。
PHP: mb_detect_encoding - Manual
検出した文字エンコーディングを返しますだそうです。
文字コード変換自体を行うわけではないので、
文字コード変換後に、変換結果が正しいか、判定するのに使うのだと思います。
が、これも方法1と同様で、
mb_convert_encoding も iconv も一部分は正しく変換してくるので、
結果として全部は変換できていないのに、
変換された一部分は euc-jp としては本当に「正しい」のです。
だから、最後まで全部変換できたのかどうかは、
これでは判定できないと思います。
うーん難しい。


☆ちょっと横道
文字をバイトで指定するときは
$str1 = b"\xE4\xB9\xA6";

のようにしたら良いですよとアドバイスを頂きました。
これは PHP5.2.1 からの機能のようです。
バージョンがこれ以上なら使えそうですね。
[PR]
by xiaoxia | 2007-07-12 18:22 | プログラム言語 | Comments(5)

ダメ女プログラマ&主婦&腐女子&バイオリン弾き


by 小霞