このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

MacPerlでの日本語の文字コードについて教えて下さい

発言者:片浦 一朗
( Date Friday, October 18, 1996 13:54:10 )


片浦@新宿区と申します。
よろしくお願いします。MacPerlの文字コードの扱いについて教えて下さい。
今、MacPerlで"MacSMTP.pl","jcode.pl","cgi-lib-Mac.pl"を利用して
formで入力された内容を整理してメイルを送るcgiスクリプトを書きました。
現状で動いてはいるのですが、時々、文字化けを起こします。
そこですが、
unix上ではPerlで日本語の処理をするときは
一度、文字コードをeucの統一して(ソースもeucで書いて)
メイルする直前にjisに変換すると思うのですが
MacPerlでは
●ソースは文字コードは何で書くのが望ましいのでしょうか?
また、
●MacPerlの付属のエディターでソースを書いた時の
 文字コードは一体、何になっているのでしょうか?
 (Shift-JISじゃないかと思っているのですが確信がありません)
以上、2点を教えていただけたらと思います。


IWGP-CHAMP さんからのコメント
( Friday, October 18, 1996 16:11:54 )

IWGP-CHAMPです。
私は,
ブラウザ→MacHTTP→CGI(MacPerl)→MacHTTPの過程でつまずいてます。
MacPerlの文字列がMacHTTPに返されません。
ご存じでしたら,MacPerl→MacHTTPへのテキストの返し方を教えて下さい。
E-MAIL:kazu@mmam.com

文字コードですが,www.yahoo.co.jpでPerlで検索して見つけたんですが,
http://www.bekkoame.or.jp/~syunji/perl/perlindx.html
で注意事項のページがありました。
お役に立てるかどうか解りませんが。

kozka さんからのコメント
( Friday, October 18, 1996 23:17:13 )

ちょっと状況が違うのですが参考になればと思います。

私はプロバイダのサーバーでPerlを動かしていますので、フォームからの
入力をeucコードへ変換したものをUnixのメールで自分あてに送るようにして
います。
その場合、フォームへの入力に半角のカタカナを使った場合jcode.plで文
字化けします。(そのような注意書きをフォーム入力画面にかかれているホ
ームページを見かける事もあるかと思います。)


MacHTTPへの返し方は以下の感じでうまくいくはずです。
print "Content-type: text/html\n\n";
print "<TITLE>Thank you</TITLE>";
print "<B>入力有難うございました。\n</B>";
exit(0);

usui seiichi さんからのコメント
( Saturday, October 19, 1996 19:56:55 )

>●ソースは文字コードは何で書くのが望ましいのでしょうか?
>また、
>●MacPerlの付属のエディターでソースを書いた時の
> 文字コードは一体、何になっているのでしょうか?
> (Shift-JISじゃないかと思っているのですが確信がありません)
>以上、2点を教えていただけたらと思います。

入門者程度の知識しかないのですが、
Jedit ととかの文字コードを判別してくれるエディターで
チェックしてみては。どうですか。
マックのアプリなので Shift-JIS でソースを書かなければ、
いけないのではないかと思いますが。

間違っていたら聞き流して下さい。
#勉強中なので もしよろしければ、
#PerlのCGIスクリプトを公開していただけると嬉しいです。


ショージ さんからのコメント
( Monday, October 21, 1996 06:24:00 )

こんにちわ、ショージです。
>ソースは文字コードは何で書くのが望ましいのでしょうか?

Macintoshですからs-jisで書きましょう。というか、特にこだわらなくても
いいですよ。

>MacPerlの付属のエディターでソースを書いた時の
 文字コードは一体、何になっているのでしょうか?

s-jisです。jisで書いたものをコピーペースとすればjisかもしれません。

で、文字化けについてですが、普通にs-jisで処理していれば起きないと思
います。cgiの中で使用する文字列についてはエスケープしてやる必要があ
るものもあります。これについてはその都度、対応すれば良いと思います。

ショージ
shoji@dit.co.jp

片浦 一朗 さんからのコメント
( Wednesday, October 23, 1996 20:50:39 )

片浦@新宿区です。
ありがとうございました。勉強になりました。
文字コードはs-jisと考えて間違いないのですね。
>MacPerl→MacHTTPへのテキストの返し方を
ですが、WebSTARがサーバーなら改行文字をCR+LFにしてやらないと
うまくいかないと思います。
私もつまずいていました。(^^;

>cgiの中で使用する文字列についてはエスケープしてやる必要があ
>るものもあります。これについてはその都度、対応すれば良いと思います。
メイルした際に特定のある文字がどうしても化けるという症状に出会われたことは
ありませんでしょうか?
例えば”「申し込み」という文字列がどうしても化けて
「応募」という言葉に変えたら何の問題もなく送れてしまった。”
という症状に出会いました。
MacPerlの問題かなとも思っているのですが....
MacPerlはVer5.xxxを使っているのですが
Ver5でなければいけないようなスクリプトは書けないので
Ver4にしてみようかと思っています。

>#PerlのCGIスクリプトを公開していただけると嬉しいです。
とても人様に見せられような物ではないのですが.....
"MacSMTP.pl","jcode.pl","cgi-lib-Mac.pl"付属のマニュアルを
お読みなられて、どうしてもというのであれば
参考程度とと言うことでよろしければ

 片浦 kataura@adquick.co.jp



田中求之 さんからのコメント
( Wednesday, October 23, 1996 23:11:18 )

Perl には全く手を染めていないのですが、

>例えば”「申し込み」という文字列がどうしても化けて

これは AppleScript でもエラーの原因になることがあるのですが、「申」という
字の2バイト目が \ (バックスラッシュ)になっているために、エスケープ・シー
ケンスとして解釈されてしまうためでしょう。 SJIS の文字列を、海外生まれの
ツールで処理する場合、この問題によくぶつかります。

AppleScript の場合ですと、たとえば、"申し込み" という文字列のデータを
変数にセットしたい場合は

 set myString to "申\し込み"

という具合に「申」の後ろに \ を挿入します。Perl はこの方法は利きませんか?

usui , seiichi さんからのコメント
( Thursday, October 24, 1996 00:21:56 )

Shoji Kawano 様作のcalendar.acgiには
"誕生\日データベース" とあります。
僕の勉強した範囲では
'誕生日データベース'  でもおなじ効果があります。

僕の作ったスクリプトで、文字列検索の問題があったのですが
EUCにしたらなおりました。


usui , seiichi さんからのコメント
( Thursday, October 24, 1996 00:36:24 )

あの、
メールを送るスクリプトを書いてみたいです。
"MacSMTP.pl","jcode.pl","cgi-lib-Mac.pl"はどこで、
手に入れられますか?

自分で書いたスクリプトを公開しないで、
他の人に公開して欲しいとは虫が良すぎました。

あの、僕の書いた、スパゲチーなスクリプトで良ければ公開します。
次のスクリプトがあります。

チャット   <UNIX 用に公開されていたものを勝手に移植しました。著作権にふれますか?
キャラバンク <人物登録簿みたいなのです。
バトル0.21  <神籬というネット上のゲームを自動化するために、ためしにつくったげーむです。

Perl初めて、やっと入門者を抜けたばかりなので、
もし、スクリプトにアドバイスをいただけたらうれしいです。

よしもと さんからのコメント
( Thursday, October 24, 1996 17:43:13 )

こちらでは、お久しぶりです (^^;

MacPerl 5.xxからメールを送るんでしたら、MacSMTP.plを使うよりSMTP.pmを
使われてはいかがですか?

 <ftp://mors.gsfc.nasa.gov/pub/MacPerl/Scripts/>

に置いています。このモジュールの中には簡単な例が載っていますので、それ
を参考にすれば簡単にメールが送れると思います。

P.S. MacPerl 5.10r2が出ました。

よしもと

片浦 さんからのコメント
( Friday, October 25, 1996 05:20:48 )

>これは AppleScript でもエラーの原因になることがあるのですが、「申」という
>字の2バイト目が \ (バックスラッシュ)になっているために、エスケープ・シー
>ケンスとして解釈されてしまうためでしょう。 SJIS の文字列を、海外生まれの
>ツールで処理する場合、この問題によくぶつかります。
 ありがとうございます。大変勉強になりました。SJIS だと\(バックスラッシュ)が
 ふまれる文字がそんざいするのですね。
 きちんと文字コードのことを理解できてなかったようです。
 それをMacPerlのせいにするなどとは、とんでもないことを考えていたようです。(^^;

>'誕生日データベース'  でもおなじ効果があります。
>
>僕の作ったスクリプトで、文字列検索の問題があったのですが
>EUCにしたらなおりました。
 EUCだと文字コードに\(バックスラッシュ)がふくまれないので
 UNIXではEUCにするのだという話を聞いて理解していたつもりだったのですが
 いざ、ある文字だけ化けたりした時に、直に\(バックスラッシュ)の
 問題だと気づかないところが、まだ、勉強不足でした。(~~;

>MacPerl 5.xxからメールを送るんでしたら、MacSMTP.plを使うよりSMTP.pmを
>使われてはいかがですか?
>
> <ftp://mors.gsfc.nasa.gov/pub/MacPerl/Scripts/>
 こちらの情報もありがとうございます。早速、ためして見ようと思います。

>メールを送るスクリプトを書いてみたいです。
>"MacSMTP.pl","jcode.pl","cgi-lib-Mac.pl"はどこで、
 今、自宅なのですが、会社のネットスケープのブックマークにあったと
 思いますので、ちょっとお時間をください。
 archieでもファイル名そのままで引っかかると思いますよ。

よしもと さんからのコメント
( Friday, October 25, 1996 08:18:57 )

MacSMTP.pl, cgi-lib-Mac.plのありかですが、これらは確かMacPerlのMLで
流れていたものだと思うので、このMLの過去の記事が読める

<http://www.its.unimelb.edu.au:801/hma/pub/macperl/>

で探してみてください。あと、jcode.plは最新版(2.0)が

<ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/>

にあります。

よしもと

片浦 さんからのコメント
( Friday, October 25, 1996 20:41:37 )

片浦です。
お約束の
>"MacSMTP.pl","jcode.pl","cgi-lib-Mac.pl"はどこで、
ですが
MacSMTP.plが
ftp://ftp.switch.ch/software/mac/perl/scripts/MacSMTP.pl
cgi-lib-mac.plが
http://www.unimelb.edu.au/~ssilcot/ssperltools/cwistools/sampleacgi/
jcode.plは既によろしいかと思います。

>><http://www.its.unimelb.edu.au:801/hma/pub/macperl/>
 私もこのページは大変参考にさせていただいています。(^^;



usui さんからのコメント
( Sunday, October 27, 1996 19:16:08 )

よしもと、片浦 先生、有り難うございました。
早速、入手して勉強します。


→  usui

Go Kobayashi さんからのコメント
( Monday, November 04, 1996 15:17:02 )

はじめまして、Go Kobayashiです。
しばらく前からUNIX(NEXTSTEP)とMacintosh上にCGIを作っているんで
すが、UNIXは、PerlでMacintoshは、(田中求之先生のeasyBBSを参考
に)AppleScriptと格闘している毎日です。
しかし、流石に2つの言語をいっぺんに勉強していると、頭の中が混
乱情態ですぅ。

と、ここで、良いことを聞いて(読んで)しまいました。
MacPerlなるものがあるそうで、「こりゃいいや!」とMacintoshの
CGIもPerlで行くことにしました。(いえいえ、決してAppleScriptを
止める訳じゃありません。AppleScriptは、ゆっくりと学習を続けま
す。)

まずは、今までeasyBBSで行っていたMacintosh用の会議室CGIをPerlで
やってみようと思ってます。(ちょっと大胆かしら?)

Perl版easyBBS(もどき)が出来たら、また、おじゃまします。(^^#)
さっ、勉強、勉強。


田中求之 さんからのコメント
( Monday, November 04, 1996 15:40:48 )

Perl に移植した EasyBBS は、まもなく吉本さんが一般公開してくださると思います。
とりあえず、基本的な枠組みの移植になると思います。

Perl を使っている方は多いと思うので、みなさんで EasyBBS の Perl 版を
いろいろと作ってもらえると面白いなと思っています。AppleScript を「翻訳」
するのではなく、同じ機能をいかに実現するかという観点で取り組んでもらえば
よいかなと思ってます。

ようは、ページにコメントを追記していく、というのがコアですので (^_^;;
ここを押さえたら、あとは何とかなると思います。


よしもと さんからのコメント
( Monday, November 04, 1996 20:49:14 )

>Perl に移植した EasyBBS は、まもなく吉本さんが一般公開してくださると
>思います。とりあえず、基本的な枠組みの移植になると思います。

はい、ホントに基本的は実装しかしていませんが、一応動くものが出来た
んであとドキュメントを書いたら公開する予定です。

ということで、後しばらくお待ち下さい。

よしもと

Yokko さんからのコメント
( Tuesday, November 05, 1996 00:27:46 )

こんにちは、よしもとさん、大下淑子です。
以前は大変お世話になりました。こちらでもいつもよく勉強させてもらって
います。PerlはGo Kobayashiさんと同じくUNIXのみで、Macでは
Applescriptを使っています。(つい最近始めたばかりです。)
Macperlでちょっと挫折してしまったわけでよしもとさんのCGI公開、
楽しみにしています。また勉強させてください。

usui , seiichi さんからのコメント
( Tuesday, November 05, 1996 01:27:04 )

 Perl版出ますか。
 また、勉強の素材がふえて嬉しいです。
 楽しみにしています。

、隍キ、筅ネ さんからのコメント
( Tuesday, November 05, 1996 08:50:18 )

Yokkoさん、こんにちは。その節はどうもです。

>>PerlはGo Kobayashiさんと同じくUNIXのみで

僕も最近はUNIXマシンで遊ぶ方が多く、今回もまずUNIXマシンで動くのを
確認してから、MacにPortしました (^^;

#ちなみに今もmule+w3で書いています (^^;

Perlが他のCGIの開発環境と比べて優れている点は、このマルチプラットホー
ムで開発できる点だと思いますので、是非Macでも懲りずにMacPerlを使って見
てください。

よしもと

、隍キ、筅ネ さんからのコメント
( Tuesday, November 05, 1996 08:51:52 )

Yokkoさん、こんにちは。その節はどうもです。

>>PerlはGo Kobayashiさんと同じくUNIXのみで

僕も最近はUNIXマシンで遊ぶ方が多く、今回もまずUNIXマシンで動くのを
確認してから、MacにPortしました (^^;

#ちなみに今もmule+w3で書いています (^^;

Perlが他のCGIの開発環境と比べて優れている点は、このマルチプラットホー
ムで開発できる点だと思いますので、是非Macでも懲りずにMacPerlを使って見
てください。

よしもと





よしもと さんからのコメント
( Tuesday, November 05, 1996 08:56:06 )

田中さん、ごめんなさい。

ダブルポストになってしまいました m(..)m
でも、発言者が化けているのはどうしてなんでしょうかねぇ?

田中求之 さんからのコメント
( Tuesday, November 05, 1996 13:10:28 )

>ダブルポストになってしまいました m(..)m

気にしないでください。

>でも、発言者が化けているのはどうしてなんでしょうかねぇ?

文字の化け方を見るかぎり、漢字コードの問題かなと思いますが、こっちもよく
わかりませんね。

ま、細かいことを気にしてもしょうがない、ということでいきましょう(笑)

よしもと さんからのコメント
( Tuesday, November 05, 1996 13:33:42 )

了解です。

ところで、予告通りEasyBBSのMacPerlを以下の所に置きましたので
興味のある方は使ってみてください。

READMEにも書きましたが、田中さんのや前薗さんのものに比べて機能が
貧弱なんで、このままでは実戦投入は難しいと思いますが、その分自分
で色々といじる気が起こるものになっていますので、がんがん手を入れ
て、みなさんの手で素晴しいものにしていただければと思っています。

→  EasyBBS Lite in MacPerl

usui , seiichi さんからのコメント
( Tuesday, November 05, 1996 20:43:03 )

早速、げっとしました。
ちょっと、手直しすれば、他のプラットホームでも(Jperl4でも)
動きそうですね。使ったことのない命令がたくさんあったので、
これを見ながら、いろいろ実験してみたいと思います。

usui , seiichi さんからのコメント
( Wednesday, November 06, 1996 03:55:04 )

よしもと先生、有り難うございます。

動きました。良かった、良かった。
絶対パスがこんな人は、
Macintosh HD:アプリケーション:@Usui@:WebSTAR:easybbs
”を’にしないと、エラーが出ます。
$basedir = 'Macintosh HD:アプリケーション:@Usui@:WebSTAR:easybbs';

デスクトップにフォルダーを置いたときの絶対パスの書き方が解りません。
どなたか、教えて下さい。

、隍キ、筅ネ さんからのコメント
( Wednesday, November 06, 1996 10:04:36 )

>>動きました。良かった、良かった。

動きましたか。ホッ (^^;

>>絶対パスがこんな人は、

このような場合は@をエスケープして、"\@"と書いてもOKです。

#でも凄いフォルダー名ですね(笑)

>>デスクトップにフォルダーを置いたときの絶対パスの書き方が解りません。
>>どなたか、教えて下さい。

ディスクトップにフォルダーがあっても、ディレクトリのtree構造は変わらな
いので、例えば、Macintosh HDの中のフォルダーhogeをディスクトップに置い
た場合のパスは

  "Macintosh HD:hoge"

となります。もし、そのフォルダーのパスが分からなくなった場合はGet Info
で見ることができますよね。

Go Kobayashi さんからのコメント
( Wednesday, November 06, 1996 13:59:44 )

こんにちは、2日見ない間に新展開...。

>するのではなく、同じ機能をいかに実現するかという観点で取り組んでもらえば
>よいかなと思ってます。

ははっ、心して取りかからせていただきます。(^^#)


>ところで、予告通りEasyBBSのMacPerlを以下の所に置きましたので
>興味のある方は使ってみてください。

今、後ろでGetしてます、と言っているうちに終わった。
では、じっくりと学習させていただきます。(^^)

ショージ さんからのコメント
( Wednesday, November 06, 1996 17:55:05 )

僕も今ゲットしてます。暇になったらつくろうと思っていたのですが、
吉本先生に先をこされちゃいました。

僕もそろそろ何かつくろうと思っています。何かアイデアがあれば
どなたかお願いします。

ではでは・・・。

ショージ
shoji@dit.co.jp

yosimoto さんからのコメント
( Wednesday, November 06, 1996 22:19:36 )

ショージさん、どうもお久しぶりです。

>>吉本先生に先をこされちゃいました。

どうもすみません (^^;
でも、機能は貧弱なんで、がんがんいじってくださいね。

よしもと

田中求之 さんからのコメント
( Wednesday, November 06, 1996 22:34:33 )

よしもとさんの EasyBBS Lite for Perl に、このサーバーの EasyBBS の
ページからリンクを張らせてもらいました。

他の皆さんも、なにか作ったときには、ぜひ一般公開して、知らせてくださいね。

usui , seiichi さんからのコメント
( Friday, November 08, 1996 06:26:57 )

公開できるレベルのものではないですが、
参考にならない、且つ、作りかけの
MacPerlなCGIスクリプトがあります。

’Perlなネット上ゲームを作ろう’という
活動が活発でないメーリングリストのまねごともあります。

#95,unix,macで動くPerlスクリプトとか作ってます。
#どなたか、先生をしてくれると嬉しいです。

便利なものができたら、公開しますので、よろしくお願いします。



→  usui , seiichi の道案内&エラーのページ

こにしです。 さんからのコメント
( Saturday, November 09, 1996 14:58:50 )

1から自分で作ったものではないのですが、
ときん@電機大さんのつくられたアクセスカウンタスクリプトを移植して公開しています。

SSIの使えるサーバーが必要ですが、うちでは、QPQ1.0b5で動作させています。

#UNIXな世界には、たくさんの公開されているすばらしいCGIがあるので、
#そのあたりをうまく移植できればなぁ。と思う今日この頃です。


→  ときんカウンタfor Mac リリースノート

元永二朗 さんからのコメント
( Monday, November 11, 1996 00:29:36 )

こんにちは。

>#UNIXな世界には、たくさんの公開されているすばらしいCGIがあるので、

確かに。会議室システムでもかなりのものがあります。
スクリプトを見て絶句しました。perlってこんな巨大なものも作れるのね・・
なんとperlスクリプト47個の集合体です。日本語化をしている人もいるようです。
Macで動くかどうかは、試していません。

→  HyperNews

田中求之 さんからのコメント
( Monday, November 11, 1996 02:05:08 )

>perlってこんな巨大なものも作れるのね・・

AppleScript だって、実効速度を別にすれば(笑)、巨大なものが作れますよ。

HyperNews って、前薗さんが EasyBBS の前に Mac に移植したやつだっけ?
(>よしもとさん)


よしもと さんからのコメント
( Monday, November 11, 1996 08:13:45 )

いえ、これは別ものですよ (^^;

確かにPerlもMacでやるとなると、実行速度が問題でしょうね。
まあ、時間のかかりそうな処理はCに任せるって手もないことはないんで
しょうが、それでどれだけ速度が上がるかは試したことはないです。

もとなが さんからのコメント
( Tuesday, November 12, 1996 01:01:22 )

>AppleScript だって、実効速度を別にすれば(笑)、巨大なものが作れますよ。

あっ。そ、そんな意味のつもりはなかったです。
取り消し取り消し。
「どんな言語でもしっかりと設計すれば巨大になっても破綻しないのね・・」
にします(^^;。

それはともかく。

上記のシステムはその巨大さの割には機能のバランスがちょっと・・で、
現時点では発言を日付でExpireさせる機能がないので(予定はあるらしい)、
インデックスのページを適当な大きさに保とうとすると、少し活発な発言
が飛び交う場合、管理者は大忙しになってしまいます。

MacPerlの実行速度ですが、以前作ったAppleScript+jgawkによる会議室cgi
をperlに移植してみたところ、処理そのものは速くなった気がしますが、
それ以前、処理に入るまでが、もたつきます。コンパイルに手間取るのかな、
とも思いますが、同じcgiをWinNTで走らせると、ネスケのキャッシュにヒット
したかと思うくらい、リプライが滅茶滅茶速くてちょっとカナシかったです
(;_;。
NTの場合は、まあ元々OSが一皮むけばコマンドラインの
世界な上、cgi専用のperl.dllなるものがあり、そのおかげで速いらしいです。
速けりゃいいってモンでもないぜ、とは言っても、やはりどことなく悔しい。
スクリプトの腕でカバーできれば良いのだけれど・・。

「MacPerlでの日本語の文字コード」から離れてしまいました。すみません。

WebStarのプラグイン型perlとかが出ないかなー。がんばれMacPerl。

よしもと さんからのコメント
( Tuesday, November 12, 1996 08:32:45 )

>Webstarのプラグイン型perl

ちょっと曖昧ですがMacPerlの作者の話では、これは確か出ないと
いったように記憶しているんですが...
UNIX用のhttpdであるApacheにもCGIを経由しないで直接perlのスク
リプトを実行するモジュールがあるんで、Macの方にもそういうのが
欲しいですね。

>がんばれMacPerl

(^^;

usui , seiichi さんからのコメント
( Tuesday, December 03, 1996 07:47:13 )

unixの Perl 4 ,Patch level: 19
で EasyBBS Lite for Perl を動かすことに成功しました。

ちょっとの手直しで動きます。これで、卒業してからもeasy bbsが使えそうです。
よかった、よかった。