Perl で携帯電話に絵文字入りメールを送る方法

perl で携帯電話に絵文字入りメールを送信する方法を解説します。

目次

・携帯電話に絵文字入りメールを送る方法の基本
 - 基本はバイナリ文字列
 - バイナリ文字列とは
 - バイナリ文字列のハンドリング
 - 文字コード体系の違い
 - 携帯端末では外字領域を絵文字用コードとして使用している
・メールを送る場合の方法
・各キャリアの対処方法
 - EZ Web の場合
 - Vodafone の場合
 - i-mode の場合
・各キャリアの文字コード体系とメール送信方法の関係
 - JISコード概説
 - 本文作成時の文字列操作
 - メール送信経路概要
 - 文字コード体系 – EZ Web と Docomo の場合
 - 文字コード体系 – Vodafone の場合
・Softbank 3Gへの対応
・更新履歴

携帯電話に絵文字入りメールを送る方法の基本

基本はバイナリ文字列

携帯電話に絵文字入りのメールを送る場合、端末によって携帯用ウェブページと同じコード表記をできる場合もあるようですが、基本的には「バイナリ文字列(バイナリコード)」を通常の文字列に埋め込んで送るのが確実です。

バイナリ文字列とは

「バイナリ文字列」とは、すごく簡単に言うと、「ASCIIじゃないよ」という印のついた文字コード列のことです。

2005-04-14 追加

上記の説明はかなり間違った説明でしたが、他にうまい説明が見つからないので、あえてこのまま残すことにします。
詳細に興味のある方は、下記の参考書をぜひお読み下さい。(面白くて分りやすいです!)

バイナリ文字列のハンドリング

perl でバイナリ文字列を書き出す場合は、pack 関数を使用します。

EUC文字コードが表示される環境で以下の1文を実行すると、「あ」と表示されるはずです。

print pack("c*", hex('a4'), hex('a2'));

EUC文字コード体系においては、「あ」を表す文字コードが「a4a2」なので、それを pack 関数で指定してやればきちんと表示されます。

print 'あ';

とした場合と同じものが表示されるのは、日本語入力環境では、「あ」と入力した時に自動的に「ASCIIじゃないよ」という印を付けてくれるからです。

文字コード体系の違い

前項のサンプルとして挙げた

print pack("c*", hex('a4'), hex('a2'));

この1文を、Windows 環境(ActivePerl)で実行すると、文字化けして表示されます。(半角の開始カギカッコが表示されると思います。)

これは、Windows OS が採用している文字コード体系がEUCではないからです。Windows の場合、「あ」を表す文字コードは「82a0」ですので、以下のようにコードを変更すれば、「あ」と表示されます。

print pack("c*", hex('82'), hex('a0'));

なお、Windows で使用している文字コードは、「IMEパッド」から参照することが出来ます。

携帯端末ではいわゆる外字領域を絵文字用コードとして使用している

上記のように、EUC環境とWindows環境では、「ASCIIじゃないよ」という合図があった時に使用される文字コード体系(文字コードと表示文字の対応づけ)が違うので、同じ文字コードを送ってしまうと文字化けとなります。

よく体験する、「Windows で入力した文字列が Macで意図どおりに表示されない」、というのも、Windows と Mac では、部分的に文字コード体系(文字コードと表示文字の対応づけ)が違うために起こります。

携帯の絵文字が各キャリアで共通して使えない、もしくは Windows などパソコンから入力できない、というのも、それぞれが違った文字コード体系を利用しているからです。

携帯電話の端末は、パソコンで言ういわゆる「外字」の領域を絵文字用の文字コードとして使用しています。このため、パソコンで絵文字に該当する文字コードを入力しようとしても、普通は全部が中黒(「・」)に見えてしまうため、入力や絵文字の表示はできません。
(パソコン用の、携帯電話に絵文字を送るツールなどでは、絵文字用外字を登録することによって入力・表示を可能にするものがあります。)