WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:j-sky絵文字対応メールフォーム

0:[投稿] ゆうこ [2002/08/16 11:20 ][環境:WIN+OTHER UNIX系+Perl]

宜しければご教授をお願い致します。

J-SKYの絵文字に関しましてどうしても解決しない事がございましてご質問させて頂きたいのです。

現在、Perl5でメールフォームを製作しているのですが…
メールフォームからJ-SKYの絵文字を送信しますと
受信した(J-SKYの)端末で絵文字が文字化けしてしまいます。

文字コードを変えたり、置き換えなど使って色々試してみたのですが解決しませんでした。
検索エンジンでも調べたのですが解決まで至りませんでした。
J-SKYの絵文字に対応するメールフォームのCGIがあれば
参考になると思い探してみたのですがこれも見つからずじまいでした。
(i-modeの絵文字対応はたくさん見つかります)

i-modeの絵文字は簡単に対応させる事ができたので
J-SKYもそれほど難しくないかな…と思い取り掛かってみたところ
2ヶ月以上も対応できない状態が続いています。
もう私一人の力では解決できそうにないと判断して知識を
お借りしたいと思い投稿させて頂きました。
宜しければご教授を頂けましたら幸いですm(_ _)m

ゆうこ


1:[回答] andi [2002/08/16 11:39 ]

詳しいことは分かりませんが、このサイトが参考になるかもしれません。
http://specters.net/cgipon/
既にご存知でしたら申し訳ありませんが。

また、そのメールフォールのソースを公開すれば
どなたか分かる方がアドバイスしてくださるかもしれませんよ。


2:[質問] ゆうこ [2002/08/16 17:52 ]

andi様、ご回答有難うございます。
すみません。m(_ _;)m
そちらのページは既に購読済みです。
J-SKY絵文字の文字コードについては把握しているつもりなのですが
絵文字に対応したメールフォームの処理方法を把握するまでは至りませんでした…。

スクリプトエラーというわけでは無いので特にスクリプトは
公開しなくても大丈夫かと思った次第です。
まったく解決していない状態なのですが下記のような感じで
処理するのかなぁ…とは思うのです、多分…。
(??部分は見当がつきません)

$message =~ s/\x1B\$([\x21-\x7A]+)\x0F/??$1??/g;

でも1〜2行で済むような簡単な処理であれば
「j-sky絵文字対応のメールフォーム」が一般的に出回ってますよね…。
最悪、絵文字の種類分だけ処理が必要なんて事も考えられます。

引き続きどなた様か分かる方がいらっしゃいましたらご教授くださいませ。m(_ _)m


3:[回答] TOM neko [2002/08/16 18:20 ]

http://specters.net/cgipon/labo/jt_emoji.html
を読んだ限りでは、 jcode.plで誤変換されることもないようなので、なにもしなければ表示されそうですけど。
つまり、必要ないので「j-sky絵文字対応のメールフォーム」がないのでは?


4:[質問] ゆうこ [2002/08/16 20:00 ]

ウェブ上で表示する分には何もしなくても問題無く表示されます。
メールに関しては何だかの処理が無いと絵文字は対応にならないみたいです。
「制御コード」に原因がありそうです。

私の知る限り、実際に使った限りではj-sky絵文字対応のメールフォーム(フリーCGI)はありませんでした。


5:[回答] ゆうこ [2002/08/17 06:24 ]

エンコード無し及び有りや絵文字コードを直接プログラムに書き込んで
フォームを通さず送信など色々と試みたのですが結果は同じでした。

\x1B\$E!\x0F
上記のコードをJ-SKYからウェブ上で見る分には絵文字として表示されます。
しかしメール出送るとまったく表示されません。

試しに上記のコードをエンコードなしでスクリプトに直接記載して
PC用のメーラーとJ-SKY端末に同様のものを送信したところ
PCで受け取ったメールには
E!
と表示されているのですがJ-SKYではまったく何も表示されません。

PCで受け取ったメールでは制御コードを含む文字が表示されているのに
J-SKYでは何も表示されないと言う事はJ-SKY以外からのメールに制御コードが
含まれる場合はJ-PHONE側のサーバでそれらの文字を削除するなどの処理がされているのでしょうか。
そんな気がしてきました…。


6:[回答] TOM neko [2002/08/17 11:20 ]

J-SKYの絵文字の開始制御コードのESCはIS0-2022-JP (いわゆるJIS) でも使われていますから、途中のメールサーバで落とされるとは考えにくいです。受け取るJ-PHONE側では削除する必要はないですし。

で、Webページ用にはShift_JISで記述する所、メールにはJISで送るでしょうから、CGIのどこかで
&jcode'convert(*message, "jis");
などとして変換してるはずです。その変換時に、本来Shift_JISに含まれるはずのない制御コードを落としてしまっている可能性があります。先のページでは誤変換はないと書いてありますが。

となると、
$message =~ s/\x1B\$([\x21-\x7A]+)\x0F/<<<$1>>>/g;
&jcode'convert(*message, "jis");
$message =~ s/<<<([\x21-\x7A]+)>>>/\x1B\$$1\x0F/g;
のように変換前後でエスケープすればうまくいくかもしれません。


7:[質問] ゆうこ [2002/08/18 23:54 ]

あれから色々と調べたところ普通の送り方じゃ絵文字は送れない事が分かりました。
今まで私はエンコードを中心に調べてきましたが的外れでした。
どうやらウェブ上の絵文字コードとメールの絵文字コードが違うみたいです。
メール専用の絵文字コードをエンコード無しで送る事で初めて絵文字と認識されます。
もちろんメールで絵文字と認識されるコードは一切公開されていません。
上記の事から察するにJ-SKYは同キャリア端末同士でのメールでしか絵文字を使用しないのを前提に開発されたみたいですね…。
270個の絵文字全てに対してそれぞれ置き換え処理が必要そうなのでもう断念します。
(J-SKYの絵文字だけの為に処理量が数倍になるのはきついです。)
携帯端末自体が進化するのを待った方が良さそうです。


8:[回答] TOM neko [2002/08/19 18:13 ]

http://members4.cool.ne.jp/~fm8283/emojipad-j/
このページではWebページでもメールでも同じ文字コードで、PCからメールする事もできるようですけど。作者が確認してないとは考えにくいですね。
http://www.zdnet.co.jp/mobile/0204/10/n_emoji.html
この記事からも、J-SKY端末同士でなくとも絵文字の送信が可能ですね。文字コードがどうなっているのかはわかりませんが。

考えられるとしたら、端末によっては1文字ずつ制御コードが必要な機種があるようなので、その変換が必要なのかもしれないとか。

とにかく、わたしだったらまだあきらめませんが。メール専用絵文字コードが存在するという情報元を教えてもらえませんか。制御コードが変わるのならまだしも、メール用に絵文字のコード全てを変える必要があるとは思えないのです。


9:[質問] ゆうこ [2002/08/19 22:30 ]

TOM neko様、色々とお調べ頂き有難う御座います。m(_ _)m
絵文字の文字コードですがウェブ上で表示する場合は下記のようになります。
\x1B\$E!\x0F
上記と同じ絵文字を表示するにはメールでは下記のコードになります。
\x1B\x24\x42\x2B\x21\x1B\x28\x42

正直、私にはこのコード変化の規則が分かりません。
「2B」や「21」の部分を変更する事で別の絵文字を表示します。
「2B」部分が大分類(絵文字リスト1〜3)、「21」部分が小分類(絵文字番号1〜90)といった感じになると思います。
「\x1B\$E!\x0F(ウェブ用)」から「\x1B\x24\x42\x2B\x21\x1B\x28\x42(メール用)」へ変わる規則が見つかれば置き換え処理を減らす事ができるかも知れません。


10:[回答] TOM neko [2002/08/20 00:18 ]

Web用「\x1B\$E!\x0F」は全部16進コードに直すと
「\x1B\x24\x45\x21\x0F」
開始:\x1B\x24
文字:\x45\x21
終点:\x0F

メール用
「\x1B\x24\x42\x2B\x21\x1B\x28\x42」
開始:\x1B\x24\x42
文字:\x2B\x21
終点:\x1B\x28\x42

小分類が同じですね。となると、大分類を変換してメール用の開始コードと終点コードで挟めばいいことになりそうです。

Web用の大分類は \x45\x46\x47 = EFG なので、おそらく
メール用が \x2B\x2C\x2D = +,- だと推測します。

試してみて下さい。


11:[回答] TOM neko [2002/08/20 01:27 ]

変換は1行
$message =~ s/\x1B\$([EFG])([\x21-\x7A]+)\x0F/"\x1B\x24\x42".$a.$2."\x1B\x28\x42" if ($a = $1 and $a =~ tr|EFG|+,-|)/eg;
メール文全体をJISコード(ISO-2022-JP)に変換したあとでね。


12:[回答] ゆうこ [2002/08/20 09:18 ]

TOM neko様、有難うございます。

試してみたのですが「この絵文字(\x1B\x24\x45\x21\x0F)」だけの対応でした。
\x1B\x24\x45\x21\x0F

\x1B\x24\x42\x2B\x21\x1B\x28\x42
大分類2 小分類1(お教え頂いた変換ではこれだけ対応しました)

下記のような変換に対応させる事は可能でしょうか…?

\x1B\x24\x45\x22\x0F

\x1B\x24\x42\x2B\x22\x1B\x28\x42
大分類2 小分類2

\x1B\x24\x45\x23\x0F

\x1B\x24\x42\x2B\x23\x1B\x28\x42
大分類2 小分類3

\x1B\x24\x46\x21\x0F

\x1B\x24\x42\x2C\x21\x1B\x28\x42
大分類3 小分類1


13:[質問] ゆうこ [2002/08/20 09:30 ]

すみません。
補足が御座います。

絵文字(改行)
絵文字(改行)
絵文字(改行)

といった具合に一文字づつ改行を加える事で大分類2には完全に対応するようです。
改行を入れずに連続で入れると1つ目の絵文字以外は全て文字化けしてしまいます。


14:[回答] TOM neko [2002/08/20 13:11 ]

わかりました。文字部分の変換は出来てますね。あとは制御コード。

じつはメール用の開始制御コード「\x1B\x24\x42」は、ISO-2022-JPでは2バイト日本語の開始制御コードと同じです。つまり、一般の漢字仮名と同じ扱いで、空いてるコード部分に絵文字を間借させてます。

終点の制御コードは次に続く文字のためのものです。つまり開始と終点で挟むというより、文字セットの変わり目で制御コードを変える仕組みです。で、「\x1B\x28\x42」はASCIIつまり半角英数の目印です。こちらは次にくる文字セットの種類によって違うものになってもいいはず。

ということで、
開始-文字-文字-文字-終点
または、
開始-文字-開始-文字-開始-文字-終点
と並べてみてください。文字は大分類変換後のものです。

もうひといき。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World