ティアのたわごと☆其の505
実は504から、rssを自動で出力していたりします。
xml形式での出力は、ここBiglobeの場合、拡張子をxmlにしなければtext/xmlで出力してくれないため 個人的にはindex.rdfとかのファイル名がいいのですが、あきらめてindex.xmlにしています。
要するに、フィードの出力には成功していると言うことです。
では、これから対応しようとしている人たちのために、簡単な説明をいたしましょう。
実はperlは5.8以降UTF8で動いているらしいです。
use Encode;?を入れないとだめだという話もどこかにありましたが
まぁ細かいところは無かったことにしてw
で、そんな感じなので、perlで普通に文字を作成して、普通に出力すると、なんとUTF8になるわけです。
でも、「そのまま日本語出力するとUFT-8じゃないよ?」という人もいますがそれは大きな間違いです。
perlのソースは、以前使ったのをそのまま流用している人なんかは、EUCやShift-Jisで書かれていますよね?
perl自身は、データの内部表現をurf-8だと信じています。
ですから、EUCコードでソースファイルが書かれていたとしても、ソース中に宣言されたデータはutf-8だと信じているんです。
でも、ソースファイルはEUCで書かれていますから、データはEUCコードで定義されます。
これが、大きな落とし穴なんです。
ちなみに、あたしはこの穴には落ちませんでした(笑
同様にCGIに送られてくる漢字コードは主にブラウザを表示している文字コードで送られてきます。
htmlをShift-Jisで書いてればSHIFT-JISで、EUCで書いてればEUCで、
古いCGIはこれをすべてEUCに変換していると思いますが、このバイト単位でのデータ変換はperlは一切関与していません。
その最中もperlは、utf-8だと信じています(笑
ですから、これをutf-8として処理するためには、
decodeを利用する必要があります
このデコードを使ったときにだけ、perlは、
「あ?uitf-8じゃなかったんだ?ごめんごめん」
とやっと対応してくれます。
$out_str = decode($in_str,"euc-jp");
などとすると、euc-jpからUTF-8へ変換してくれます。
xmlでデータ出力するときは、
細かい書式設定がありますが、
それをのぞけば、後は、
print を実行すれば、utf-8のファイルができるわけです。
ここのホームページはデータはすべてEUCで保持しているため受信したデータはすべてEUCに変換してDBへ登録し、XML出力するときだけ、上記decodeを使っています。
っていうかですね、
jcode.pl無くても何とかなるらしいんですよね・・・・
まぁ全体を変えるの面倒ですから、今までのところは一切変更していないんですよ
そんな感じでこれからも更新していきますわ |