トップ> リンク集> Kawa.netxp 日本語処理・携帯絵文字処理関係のPerlモジュール
Kawa.netxp 日本語処理・携帯絵文字処理関係のPerlモジュール
相互リンク - 情報サイト - IT関連メディア - IT関連論者 - オープンソース - 便利なHOWTOサイト - Internet Society - Perl/CGI - ISP - 鹿児島かごしま薩摩 - デザインテンプレート - デザイン素材 - ビジネスブログ - アクセスアップ,SEO,SEM,集客,売上アップ - Googleランクアップ - アクセスログ解析 - 便利サイト -日本語処理・携帯絵文字処理関係のperlモジュールKawa.netxp日本語処理・携帯絵文字処理関係のPerlモジュール日本語を含む多言語処理(主にUTF8、Shift_JIS、ISO-2022-JP。その他にLatin1、EUC-JP、EUC-KR、Big5、GB2310などにも対応)や、iモード・ボーダフォン・EZweb 携帯絵文字処理関連のモジュールです。CGIparamJP.pm - CGI.pmのクエリ中の日本語処理EmailHTML.pm - HTMLメールMIMEマルチパートメッセージの生成EmailJP.pm - 携帯絵文字対応のSMTPメール送信EmojiTrans.pm - iモード用絵文字をVodafone/EZweb用絵文字に変換Encode561.pm - Perl 5.005/5.6.1 環境で Encode.pm ライクな操作EntityRef.pm - © 等の実体参照表記を16進数コード参照表記に変換EscapeJIS.pm - ISO-2022-JP テキスト中の絵文字・拡張漢字を変換EscapeSJIS.pm - Shift_JIS テキスト中の絵文字・拡張漢字を変換EscapeUTF8.pm - UTF8 テキスト中のコード参照表記を変換これらのモジュールは、CGI / mod_perl 環境どちらでも利用できます。Perlのバージョンは5.005以降で利用できます。(5.6.1、5.8.xを含む)ダウンロードはこちらから:i18n-emoji.20050913.tar.gzTGZ i18n-emoji.20050913.zipZIPuse lib ディレクティブで指定した @INC なディレクトリにアップロードするのが正しい使い方ですが、より簡単な使い方としては、『.tar.gz アーカイブ中のファイルをサーバの .cgi と同じディレクトリにそのままアップロードする』だけでもOKです。レンタルサーバ・ホスティングサーバなど、root 権限を使用できなかったりCPAN からのモジュールインストールのできない環境でも、利用できます。更新履歴各モジュールとこのページの主な更新履歴です。2005/09/13EscapeUTF8.pm で、mime_decode() mime_encode() メソッドに対応しました。CGIparamJP.pm で、CGI.pm のファイルアップロードに対応しました。(v3.01)アーカイブに EmailParser.pm と EmailPOP3.pm を追加しました。配布アーカイブ形式を .tar.gz に加えて .zip も追加しました。2005/04/22前のバージョンで Vodafone 3G 携帯の機種判別には対応しましたが、実際のところ、Vodafone 3G 携帯では Shift_JIS ページを表示しているとフォームから絵文字が送信できないことが分かりました。絵文字を入力しても、サーバには絵文字のみ削除されてから届きます。恐らく、携帯端末内部の Unicode→Shift_JIS 変換処理が絵文字コードの変換に対応していないのでしょう。Vodafone 3G 携帯で絵文字を送信するには、UTF-8 でページを記述しておく必要があるようです。なお、送信される Unicode の絵文字のコードはEmojiTrans.pm の F001〜 のコード体系でなく、Vodafone Java 仕様の E001〜 の番号となるようです。EZ 絵文字と文字コードが重複してしまうので、これも勘弁願いたかったが。。。2005/02/02EscapeSJIS.pm および EmojiTrans.pm にて、Vodafone 3G 携帯に対応しました。Vodafone 3G 携帯は従来の機種と HTTP_USER_AGENT 環境変数が異なっており、旧バージョンでは Vodafone 機種としての判別に失敗しておりました。2004/11/23このページの公開を開始しました。CGIparamJP.pm モジュールPODCGI.pmのサブクラスで、クエリ中の日本語処理を行います。set_param_charset メソッドが追加されており、クエリ変数の文字コードの自動判別・自動変換を行います。それ以外は通常の CGI.pm と全く同じように利用できます。クエリ変数の値の取り出しは通常通り param メソッドを利用します。CGI.pm との違いは、new 後に一度だけ set_param_charset を呼ぶ点のみです。 use CGI; # クエリ入力 use CGIparamJP; # クエリ入力の日本語コード変換 use Encode561; # 汎用の日本語コード変換 use EscapeSJIS; # Shift_JIS で絵文字処理を行う my $cgi = new CGIparamJP(); $cgi->set_param_charset( "EUC-JP", "Shift_JIS" ); my $name = $cgi->param( "name" );クエリが Shift_JIS コードで入力された場合は、EscapeSJIS.pm と併用することでクエリ変数中の携帯電話絵文字を &#xHHHH; 形式に、また Windows の拡張文字(NEC・IBM拡張漢字)を &#xHHHH; 形式に変換します。EmailHTML.pm モジュールPODHTMLファイルをMIMEマルチパートに変換します。 # HTMLメール送信サンプルプログラム use strict; use EmailHTML; use Net::SMTP; # 初期設定 my $SMTP_HOST = "127.0.0.1"; my $MAIL_FROM = 'from@domain.name'; my $MAIL_RCPT = 'to@domain.name'; my $URL = "http://www.domain.name/i/"; # 指定 URL の内容から HTML をダウンロードする my $eh = new EmailHTML( URL => $URL ); # 標準的なメールヘッダを追加で設定する $eh->set_header( From => $MAIL_FROM ); $eh->set_header( To => $MAIL_RCPT ); # MIME マルチパート HTML メール形式で取り出す my $data = $eh->out_text(); # Net::SMTP を使ってメール送信する my $smtp = new Net::SMTP( $SMTP_HOST ) or die "SMTP Failed - $SMTP_HOST\n"; $smtp->mail( $MAIL_FROM ) or die "Invalid sender - $MAIL_FROM\n"; $smtp->to( $MAIL_RCPT ) or die "Invalid receipts - $MAIL_RCPT\n"; $smtp->data(); $smtp->datasend( $data ); $smtp->dataend(); $smtp->quit();指定したURLからHTMLをダウンロードし、画像ファイルを含むMIME マルチパート形式による HTML メールに変換します。ページ内の画像も自動的にダウンロードされ、Base64エンコードされます。HTML 中に含まれる IMG タグは <IMG SRC="cid:〜"> と書き換えられます。生成した HTML メールは、Outlook Express、Becky! 2 で受信・表示できることはもちろん、NTT DoCoMo 900i シリーズのデコメールとしても受信・表示できます。ただし、デコメールの制限により、画像ファイルを含めた容量が10KB 以下となっている必要があります。10KB を超える場合は、900i 実機で受信した場合に単なる画像ファイル添付メールとなっているため、ご注意ください。HTML の文字コードはダウンロードしたまま変更されません。サーバ上で Shift_JIS のコンテンツは、メール中でも Shift_JIS になります。ISO-2022-JP、EUC-JP、UTF-8、ISO-8859-1、US-ASCII なども利用可能です。UCS-2 などの 16bit 文字は利用できません。なお、EmailHTML.pm 自体は HTML メールデータの生成処理のみを行い、SMTP プロトコルを利用したメール送信処理は行いません。メールを送信する場合は、Net::SMTP モジュールを併用するか、out_file() メソッドで sendmail を起動してメールを送信してください。EmailJP.pm モジュールPODNet::SMTP モジュールを併用して、メールを送信します。 use EmailJP; my $count = &EmailJP::sendmail( mail => $text );$text にメールヘッダ+本文のデータが入っている状態で呼び出すと、$text 中のメールヘッダを自動的に参照して宛先アドレスを決定し、メールを送信します。(もっとも簡単なサンプル) use EmailJP; my $server; $server = "127.0.0.1"; # SMTPサーバ $server = [qw( 192.168.0.1 127.0.0.1 )]; # 複数指定可能 my $count = &EmailJP::sendmail( server => $server, # SMTPサーバ hello => "localhost", # HELLO timeout => 5, # タイムアウト return => $return_path, # エラー返送先 to => $rcpt_to, # メール宛先 head => $mail_head, # メールヘッダ body => $mail_body, # メール本文 charset => "iso-2022-jp", # 送信文字コードは JIS internal => "EUC-JP" # 内部文字コードは EUC );では、メールヘッダとメール本文を別の変数として渡しているだけでなく、送信宛先アドレスや使用する SMTP サーバ、文字コードなども指定しています。送信文字コードが ISO-2022-JP の場合は、自動的にEscapeJIS.pm モジュールが呼び出されます(明示的なuse EscapeJIS;は不要)。メールヘッダ・メール本文中の携帯絵文字や、PC 拡張漢字を安全に送信します。(ただしiモードの仕様上、iモード絵文字については ISO-2022-JP ではiモード携帯実機には送信できません。Shift_JISを使用してください)送信文字コードが Shift_JIS の場合は、自動的にEscapeSJIS.pm モジュールが呼び出されます(明示的なuse EscapeSJIS;は不要)。メールヘッダ・メール本文中の携帯絵文字や、PC 拡張漢字を安全に送信します。メール中に  のような Unicode 16進数コード参照表記があると、宛先メールアドレスから自動判別を行って送信処理を切替えます。PC宛メールの場合 → ドコモ絵文字(JIS外字)として送信ドコモ宛メールの場合 → Shift_JIS 形式メールとして送信EZ宛メールの場合 → EZ絵文字コードに変換して送信Voda向けメールの場合 → Voda絵文字コードに変換して送信つまり、1種類のメールテンプレートを作成するだけで、どのキャリアの携帯でも絵文字の入ったメールを受け取れることができます。EmojiTrans.pm モジュールPODドコモiモード用絵文字を、EZ・ボーダフォン用絵文字に変換します。本モジュールでは、絵文字は Unicode の HHHH; 形式にした状態で扱います。絵文字以外の文字については、ISO-2022-JP、EUC-JP、UTF-8、ISO-8859-1、US-ASCII など文字コードは問いません(UCS-2 は除く)ドコモ機種では、出力処理時にドコモ絵文字( 等)をShift_JIS バイナリに変換します。標準絵文字機種では、拡張絵文字部分は似た標準絵文字に変換されます。ボーダフォン機種では、出力処理時にボーダフォン絵文字( 等)をエスケープシーケンス付バイナリに変換します。(ただし、ボーダフォン絵文字は Java 環境の仕様では U+E001〜U+E55A にマップされますが、本仕様では EZ 絵文字との重複マッピングを避けるため、U+F001〜U+F55Aに移動しています)EZ XHTML 機種では、出力処理時にEZ絵文字( 等)をShift_JIS バイナリに変換します。EZ HDML 機種では、出力処理時にドコモ絵文字はEZ絵文字に変換せずに&#ddddd; 表記で出力して、後はGWセンタでの自動変換に任せてしまいます。EZ絵文字( 等)は Shift_JIS バイナリに変換します。EmojiTransMap.txt 変換マップ変換マップ(定義ファイル)中の絵文字は、Shift_JIS バイナリコードではなく、全て Unicode の 16進数で表記しています。(コメント部分は EUC-JP です)Encode561.pm モジュールPODPerl 5.6.1 や 5.005 など Encode.pm を利用できない環境で、Encode.pm ライクな変換関数を提供します。 use Encode561; my $text = "Hello, World!\n"; Encode561::from_to( $text, "utf8", "cp932" ); print $text;Encode.pm は日本語だけでなく多言語の変換に有用ですが、Perl 5.8.x 以降でしか利用できません。しかし、サーバ運用上、どうしても Perl 5.005 や Perl 5.6.x といった古いバージョンのまま稼動してるマシンも多いと思います。Jcode.pm や Unicode::Map といったモジュールを組み合わせることでEncode.pm と同等の処理も実現できまうが、Encode/Jcode/Unicode::Map ではそれぞれインターフェースが異なるため、プログラムが複雑になってしまいます。Encode561.pm は、Encode::from_to 関数と同等の処理を行う関数Encode561::from_to 関数を提供します。Perl 5.005 および 5.6.x のサーバ上で Encode561.pm を利用して開発したプログラムを、Perl 5.8.x のサーバで本来の Encode.pm を利用して稼動させることが可能になります。Jcode.pm および Unicode::Map では、Unicode から他のコードに変換時に出力先文字セットで表現できない文字は「??」や「〓」に変換されたり、削除されてしまいます。Encode.pm には、それを回避する Encode::FB_XMLCREF オプションがあります。Jcode.pm および Unicode::Map でも、このFB_XMLCREF 相当の機能を実現するパッチプログラムを予め適用しておくことをお勧めします。変換不可能な文字を HHHH; の形式にエスケープすることで、文字化けを防ぎます。Encode561.pmの逆の役割をするモジュールにJEcode.pmがあります。こちらは、Perl 5.8.xでEncode.pmを利用してJcode.pm互換のメソッドを提供するラッパーだそうです。EntityRef.pm モジュールPOD文字列中の実体参照表記をコード参照表記に変換します。new コンストラクタHTML/XML 用の実体参照の定義マップファイルを読み込みます。new() の第1引数で定義マップファイルを指定します。引数で定義ファイルを1つも指定しない場合、デフォルトでは HTMLlat1.ent、HTMLspecial.ent、HTMLsymbol.entの3つの標準定義マップファイルを読み込みます。これらのファイルは EntityRef.pm と同じディレクトリに設置してください。 use EntityRef; my $er = new EntityRef( "EmojiDoCoMo.ent" );この例では、ドコモ絵文字用の実体参照の定義マップファイルのみを読み込みます。entity2hex メソッドnew で読み込んだ定義マップを利用して、文字列中の実体参照表記を、Unicodeコード番号表記(16進数)に変換します。 use EntityRef; my $er = new EntityRef(); my $text = "EURO € ALPHA Α COPY ©\n"; $er->entity2hex( \$text );この例では、$text 中の実体参照表記がコード参照表記に変換されます。$text の文字コードは、UTF-8/Latin-1/Shift_JIS/EUC-JP など問わず利用できます。(UCS-2/UTF-16 を除きます)HTMLspecial を使った変換: € → € (€ ユーロマーク)HTMLsymbol を使った変換: Α → Α (Α ギリシャ文字のアルファ)HTMLlat1 を使った変換: © → © (© コピーライトマーク)ただし安全・互換性のため、Unicode 番号が 128 より小さい文字(0〜127)についてはコード参照表記には変換されず、実体参照のままとなります。具体的には < & > " などが該当します。HTMLlat1.ent エンティティ定義HTML 4.01 Latin-1 entities (© → © → © など)http://www.w3.org/TR/html401/HTMLlat1.entHTMLspecial.ent エンティティ定義HTML 4.01 Special entities(< → < → <、> → > → > など)http://www.w3.org/TR/html401/HTMLspecial.entHTMLsymbol.ent エンティティ定義HTML 4.01 Symbol entities (α → α → α など)http://www.w3.org/TR/html401/HTMLsymbol.entEmojiDoCoMo.ent エンティティ定義ドコモの携帯絵文字それぞれに英字名を定義したものです。(ドコモの正式の絵文字名称ではありません)EscapeJIS.pm モジュールPODISO-2022-JP テキスト中に絵文字・IBM拡張漢字を使えるようにします。 use EscapeJIS; $body = "絵文字入り[]\n"; Jcode::convert( \$body, "jis", "euc" ); EscapeJIS::unescape( \$body ); print $body;unescape メソッドを呼び出す際には$body内は予め JIS コードにする必要があります。絵文字コードは &#xHHHH; のUnicode 16進数コード参照形式とします。主に、このunescapeメソッドを通過した文字列をメール送信して利用します。ボーダフォン携帯実機にて、絵文字入りメールを受信・表示できます。EZweb 携帯実機宛にて、絵文字入りメールを受信・表示できます。PC にて、IBM拡張漢字入りメールを受信・表示できます。なお、ドコモ携帯実機では charset=ISO-2022-JP のメールでは絵文字は利用できないので、EscapeJIS.pm は使っても絵文字は表示できずに文字化けします。EscapeSJIS.pm を利用して charset=Shift_JIS でメールを送る必要があります。EscapeSJIS.pm モジュールPODShift_JIS テキスト中に絵文字・IBM拡張漢字を使えるようにします。 このモジュールで取り扱う文字コードは、Shift_JIS コードのみとします。EUC-JP や UTF-8 への変換機能は含みません。ドコモiモード用絵文字http://www.nttdocomo.co.jp/p_s/imode/tag/emoji/list.htmlボーダフォン用絵文字http://www.dp.j-phone.com/dp/tool_dl/web/picword_top.phpEZweb用絵文字http://www.au.kddi.com/ezfactory/tec/spec/3.htmlなお、ボーダフォン絵文字については、ボーダフォン社のJava 環境(Vアプリケーション仕様)では各絵文字が Unicode の E001〜E55A にマップされますが、本仕様では EZ 絵文字との重複マッピングを避けるため、F001〜F55Aに移動しています。escape 関数IBM 拡張漢字・携帯電話絵文字を含む文字列は文字化けの原因となるため、HHHH; 16進数 Unicode コード参照表記に変換することで、以後の Shift_JIS のテキスト処理を安全にします。Windows IBM拡張漢字を HHHH; 形式に変換しますドコモiモード用絵文字を HHHH; 形式に変換しますVodafone用絵文字を HHHH; 形式に変換しますEZweb用絵文字を HHHH; 形式に変換しますそれ以外の外字等については、下駄『〓』に変換します。unescape 関数HHHH; 16進数 Unicode コード参照表記のIBM拡張漢字・携帯電話絵文字を、Shift_JIS バイナリに変換します。HHHH; 形式の表記に全ての環境が対応しているわけではないので、PCや携帯電話実機での表示時の互換性を高めます。ドコモ機種では、出力処理時にドコモ絵文字( 等)をShift_JIS バイナリに変換します。標準絵文字機種では、拡張絵文字部分は似た標準絵文字に変換されます。ボーダフォン機種では、出力処理時にボーダフォン絵文字( 等)をエスケープシーケンス付バイナリに変換します。EZ XHTML 機種では、出力処理時にEZ絵文字( 等)をShift_JIS バイナリに変換します。EZ HDML 機種では、出力処理時にドコモ絵文字はEZ絵文字に変換せずに&#ddddd; 表記で出力して、後はGWセンタでの自動変換に任せてしまいます。EZ絵文字( 等)は Shift_JIS バイナリに変換します。EscapeUTF8.pm モジュールPODEscapeSJIS.pm と EscapeJIS.pm モジュールと同様に、escape および unescape 関数を提供します。実際には、UTF8 環境下ではエスケープ処理は不要のため、escape メソッドは何もしません。現状では単に同名の関数を提供しているだけですコメントはこちらへ by AjaxComその他のページへのリンクkawa.net xp トップページこのページへのトラックバック by AjaxTB トラックバックURL:http://www.kawa.net/service/tb/ajaxtb.cgi/works/perl/i18n-emoji/i18n-emoji.htmlKawa.netxp© Copyright 2004 Yusuke Kawasaki
related articles
- [Thumbnail] ウェブページサムネイル画像取得 Snapshot service
- [Perl] Google Web Search API検索処理サンプル
- [JSAN] XML.ObjTree - XML〜JavaScriptオブジェクト変換クラス
- [Perl] XML::TreePP - Pure Perl実装によるXMLファイル展開モジュール
- [Yahoo!] Yahoo! JAPANウェブ検索WebサービスAPI
- [Technorati] テクノラティのブログ検索API
- [IKEA] SALMI ダイニングテーブル 0円!
- [Dojo] JavaScriptのみでクロスドメインXMLHttpRequest
- [Windows] linkd.exeを使ってCドライブの空き容量を増やす
- [Perl] XML::FeedPP - RSS・RDF・Atomフィードの解析・生成・変換・結合
- [YUI] マウスオーバーでリンク先サムネイル表示
- [Google Pack] 無料ウイルス対策 Norton AntiVirus 2005 SE
- [Ajax] 世界のAjax 50サイト中の日本語3サイト
- [Ajax] 中国語の漢字にピンインのローマ字ルビ
- [Perl] Lingua::*::Romanize::* 日中韓/ローマ字変換モジュール
- [WorldCup] livedoor Readerマスコット ワールドカップ版
- Visited Countries
- Google Spreadsheet を試してみました
- [TB] Simple APIでトラックバックにサイトの縮小画像を入れてみた
- [JavaScript] Animation.Raster - ラスタスクロールだ!
- [ajax] AjaxTB/トラックバック機能を静的HTMLページに追加するJavaScript
- [ajax] AjaxCom/静的HTMLページに1行コメントを書き込める掲示板
- Ajax/Web2.0フレームワーク・ツールキット・ライブラリ
- [SBM] Spurl.netの被ブックマーク件数を表示してみた
- [Perl] WebService::Hatena::BookmarkCount - はてなブックマーク件数取得APIへのインターフェース
- [WILLCOM] 携帯フルブラウザをphone.plで携帯端末扱いにするか
- [CSS] モテはスタイルシートにある!!
- [Perl] Encode::FB_XMLCREFでコード変換に失敗&対策
- [JavaScript] Sarugau JSで、サーバサイドJavaScript
- [Mac] Safari for Intel Mac専用ブラウザ・クラッシャー
- たった2行でブラクラ (Safari for Intel Mac専用)
- [JavaScript] Intel Mac版とPowerPC版のSafariは違うの?
- [Ajax] 日本語(漢字かな混じり文)にローマ字ルビ
- [SBM] はてブ・del.icio.usの被ブックマーク件数を表示してみた
- 「朝日記の奇跡」に興奮した。1日目
- [Perl] HTML::TagParser - HTMLソースの解析/属性値やinnerTextの取得
- サーバメンテナンス
- JSAN Search - JavaScript Libraries Database
- [JSAN] JavaScriptライブラリ検索 - JSAN Search
- [JSON] xml2json.pl - XMLファイルをJSONに変換するスクリプト
- [XML] XML::TreePPとXML.ObjTreeの属性プリフィックス「@」対応
- [JSON] コイツ、速いぞ! きっとFirefoxのXMLパーサが遅いんだ。
- タブとスペースのベストプラクティス(平和主義)
- [RSS] livedoor Reader記念 『add to〓』アイコン
- [Flash] iモード向けFlash Lite制作メモ・TIPSなど
- [Flash] FlashLiteでは_highquality使っていいの?
- [IE7] アンインストールは“更新プログラムの表示”をONに
- [Windows] WinSSHDでWindows XPにsshで接続する/VSEE
- [digg] 半日で約2万ユニークユーザのアクセス
- [JavaScript] Animation.Cube - サイコロ回転エフェクト (rotating cube animation)

