携帯の絵文字には詳しくないですが、おそらく難しそうです。
現在の App Engine メール送信機能では、日本語が入っているメールは ISO-2022-JP
でエンコードされてしまいます。
どなたか出来ている方はいらっしゃいますか?
自由にメールのエンコード方法を指定できるようになれば出来そうですが、それは今のところ無理です。
-- matsuo
> --
> このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に送られています。
> このグループに投稿するには、google-app-...@googlegroups.com にメールを送信してください。
> このグループから退会するには、google-app-engine...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/google-app-engine-japan?hl=ja からこのグループにアクセスしてください。
>
>
--
Takashi Matsuo
Developer Relations
Developer Advocate for Google App Engine/iGoogle
Google Japan, Inc.
この件ちょくちょく調べているのですが、まともに使える方法はまだ
見つけられていません。
App Engineから送られるメールの文字コードは、松尾さんが言及されているように、
日本語が入っていれば基本ISO-2022-JPです。中国語が入っていればGB2312(だったはず)、
キャラクタによっては、UTF-8で送られることもあります。
携帯でちゃんと絵文字を表示させるには、文字コードを指定して、その文字コードで
書かれた文章を出力できる必要があるので、例えば送信メールのエンコーディングを
指定してかつメール本文をbyte[]で渡せるような機能か、あるいは、
・Google提案のUnicode絵文字で書けば、携帯キャリア毎に適切なエンコーディング、
キャラクタコードに変換して送信
という機能が必要になります。
個人的には後者の機能が実装されるととても嬉しいんですが。
2010年11月30日4:42 Takashi Matsuo <tma...@google.com>:
もし、 iso-2022-jp でメールを送信したいのであれば、iso-2022-jp に変換できない文字を削るしかないと思います。① ->
1、ー -> -、など
会社では携帯メール対応の文字コード処理でよくやっています。
body = u"~-①"
replace_map = (
(u'\uff5e', u'\u301c'), # ~
(u'\u2160', '|'), # |
(u'\uff0d', u'-'), # ー
(u'\u2460', u'1'),
(u'\u2461', u'2'),
(u'\u2462', u'3'),
(u'\u2463', u'4'),
(u'\u2464', u'5'),
(u'\u2465', u'6'),
(u'\u2466', u'7'),
(u'\u2467', u'8'),
(u'\u2468', u'9'),
(u'\u2469', u'10'),
(u'\u246a', u'11'),
(u'\u246b', u'12'),
(u'\u246c', u'13'),
(u'\u246d', u'14'),
(u'\u246e', u'15'),
(u'\u246f', u'16'),
(u'\u2470', u'17'),
(u'\u2471', u'18'),
(u'\u2472', u'19'),
(u'\u2473', u'20'),
(u'\u2474', u'(1)'),
(u'\u2475', u'(2)'),
(u'\u2476', u'(3)'),
(u'\u2477', u'(4)'),
(u'\u2478', u'(5)'),
(u'\u2479', u'(6)'),
(u'\u247a', u'(7)'),
(u'\u247b', u'(8)'),
(u'\u247c', u'(9)'),
(u'\u247d', u'(10)'),
(u'\u247e', u'(11)'),
(u'\u247f', u'(12)'),
(u'\u2480', u'(13)'),
(u'\u2481', u'(14)'),
(u'\u2482', u'(15)'),
(u'\u2483', u'(16)'),
(u'\u2484', u'(17)'),
(u'\u2485', u'(18)'),
(u'\u2486', u'(19)'),
(u'\u2487', u'(20)'),
(u'\xa0', u' '), # 空白
)
for f, t in replace_map:
body = body.replace(f, t)
2010/12/3 argun <argu...@gmail.com>:
--
Ian
midoridgeです。はじめまして。
基本的には、lan lewis さんのいうように、エラーになる文字を事前に定義しておいて、置き換えればいいんじゃないですかね。
> 例えば、全角㍉、㊤、㍽、㈱の場合で、どのように処理しますか?
> 対応文字がありません。
対応文字がないというのではなくて、エラーになるのであれば、lan lewis さんの提示したマップに、追加すればよいかと思うのですけど?
マップに追加しない理由はあるのですか??
他の方法だと、encode('iso-2022-jp')のときに、try~exceptで、エラーを捕まええて、エラーになる文字だけを、〓とかに順番に置き換えてから、再度encodeするとかでしょうか。
ただ、この方法だと、1文字ごとにencodeできるかをチェックする必要があるので、非効率です。
なので、lan lewis さんの提示したマップに追加して置き換えて、それでもエラーになる場合は、送信せず、エラー画面を表示するとかのほうがいいのではないでしょうか。
----
def toJis(text):
def conv(word):
try:
word.encode('iso-2022-jp')
return word
except:
return u"〓"
text_u = text.decode('utf-8')
text_j = ''
try:
text_j = text_u.encode('iso-2022-jp');
except:
buffer = ''
for i in range(0,len(text_u)):
buffer += conv(text_u[i])
text_j = buffer.encode('iso-2022-jp');
return text_j
2010年12月3日14:40 argun <argu...@gmail.com>:
Javaだと、送りたい生のバイト配列を無理やり文字列に入れて
送れば、絵文字入りのメールが送れます。
MailService.Message m = new MailService.Message();
//送信先など設定。
m.setTextBody(new String(/* 機種依存の文字コード配列 */, "ISO8859-1"));
//送信
こんな感じです。
Pythonでも同様にできたはず。
但し、仕様としてはどこにも書かれていないので、ある日突然
送れなくなる可能性もあります。
ご参考になれば。
2011年5月25日16:24 gorn <gor...@gmail.com>:
> --
> このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に送られています。
> このグループに投稿するには、google-app-...@googlegroups.com にメールを送信してください。
> このグループから退会するには、google-app-engine...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/google-app-engine-japan?hl=ja
> からこのグループにアクセスしてください。
>
--
Takao Nakaguchi
takao.n...@gmail.com