アプリ版:「スタンプのみでお礼する」機能のリリースについて

機種依存文字、丸1、ⅱ、一文字のTel、一文字の(株)、髙﨑、などを許し、半角カナを全角に変換してメールを送信をするには、どうしたらいいのかわかりません。
(この掲示板自体が一部の特殊文字を許さないので表現がわかりにくいですが)
perlのバージョンは、v5.8.6です。
cgi自体はshift-jis(cp932)のままでアップロードしています。
Encode::from_toや、Jcode::convert(\$text,'jis','jis','z') などを組み合わせていますが、思ったように送信できません。

また、メールのタイトルや内容に半角カナを使うことは、サーバがlinuxで、対象がwindowsとmacの場合は問題になるのでしょうか。

A 回答 (3件)

「思ったように送信できない」ではなくもうちょっと具体的に症状を書いてください。



メール送信に使うということなので、ISO-2022-JPに変換しているんじゃないかと
思いますが、これはお使いになりたい文字群を含んでいない集合です。
ですから、from_toやconvertを通した時点でゲタ文字になるとかになってしまう
ような気がするのですが違いますか?

それから、ISO-2022-JPで送る限りにおいては、半角カナを使った場合
どうなるかは経路や受け手のソフトウェア(OSの問題ではありません)の振る舞いに
よるので、なにが起こっても文句は言えません。

UTF-8で送るという手段は取れませんか?
まあ受けてのメーラーが対応してないとダメですけど。

この回答への補足

ありがとうございます。

>「思ったように送信できない」ではなくもうちょっと具体的に症状を書いてください。
色々の組み合わせでやってみたのですが、

アイウエオワヲン\x{2460}\x{2171}\x{3231}\x{2121}\x{9ad9}\x{fa10}$(D<t\x{fa11}\x{5fb7}

となったりします。
チェックを外せば、半角カナも特殊文字も送れました。
最近のメールソフトは賢いので、半角カナを含めて、いい加減に送っても良いのかとも考えました。

まず半角カナは、送り手と受け手だけでなく、経路のサーバなどで問題が起こる(迷惑をかける)場合もあるのでしょうか。

以前は、jcode.plを使っていた関係もあって、NEC文字や半角カナは対応外なので、入力しないでくれと言っていました。
ところが、最近はNEC特殊文字を送受信している物も多く、髙﨑などの要望を拒否できなくなっています。

送れれば、ISO-2022-JPでも、UTF-8でもかまいません。
また、この掲示板自体特殊な文字を変換(丸1->(1)、一文字の(株)->(株))していますが、これを実現する方法でも良いのです。

基本的には、perl5.8で、半角カナを含むNEC特殊文字の処理を、入力拒否で無い方法で処理する方法をどなたか教えて下さい。

補足日時:2006/07/23 08:11
    • good
    • 0

調べてみました(時間がないので中途半端ですが)。


まず、
半角カナ→全角カナ変換は
Jcode->new($str, 'cp932')->utf8;
でできますが、はしご高などの文字が '?' に置き換わってしまう場合があります。ですのでこれによる変換は事実上できません。

Encode::from_to($str, 'cp932', 'jis') で、 が化けるのも確認しました(変換先をutf-8に指定しても同じなのでバグかも?)。

ということで、

1) (他に化ける文字があればそれも)を他に現れないシーケンスたとえば
####792C#### のようなものに置き換える (ここで792CはをJIS形式で表したときの値)
2) 半角カナを自前で全角カナに変換
3) Encode::from_toで jis に変換
4) 1)で置き換えたシーケンスを
s/####(.+)####/unpack 'H4', $1/eg;
で再変換する。

という手順でどうでしょうか?

use encodingについてお尋ねしたのは、それがあるとないとで事情が変わるからです。
お書きの通り、これやってると副作用がでかいので。

疑問等あれば補足に書いてください。
    • good
    • 0

ちょっと整理させてください。



クライアントのメールソフトは決まったものでしょうか(Outlookとか)
で、cgiで何か処理をしていてその結果なりをメールで送るということで
いいですか?
使っているPerlのスクリプトでは use encoding 'cp932' (もしくは 'shiftjis'など)をしていますか?

次に
> アイウエオワヲン\x{2460}\x{2171}\x{3231}\x{2121}\x{9ad9}\x{fa10}$(D<t\x{fa11}\x{5fb7}

ですが、x{} で表されているのは変換できないのでUnicodeでのコード番号に置き換えられていますね。
調べたところ

U+2460 丸付き1
U+2171 小文字ローマ数字 2
U+3231 (株)
U+2121 TEL
U+9ad9 はしご高
U+fa10 塚の異体字
U+fa11 崎の異体字
U+5fb7 徳の異体字

のようですがそういうデータですか?
$(D< が分からないのですが、ひょっとして半角かなですか?

> まず半角カナは、送り手と受け手だけでなく、経路のサーバなどで問題が起こる(迷惑をかける)場合もあるのでしょうか。

サーバが落ちるということはおそらくないでしょうが、そのサーバが手を加えて文字化けの原因になることは
あるかもしれません。

で、
> チェックを外せば、半角カナも特殊文字も送れました。
> 最近のメールソフトは賢いので、半角カナを含めて、いい加減に送っても良いのかとも考えました。
ということなので、半角かなだけ置換してやるのがお手軽かもしれません。姑息ですけどね。
実はISO-2022-JPの振りして半角かなを送る方法は3種類くらいあるので
送り手と受け手でかみ合わないと化けたりします。受けてのメーラーに
よってはどれでも受け取ってくれるかもしれませんが。

とりあえず、半角かな(ShiftJISで\xa1~df)までを対応する全角かな
に置き換えるということで対処できるかも知れません。このとき、
カ゛→ガ をカ→カより先にやるとか注意が必要かもしれません。

この回答への補足

>クライアントのメールソフトは決まったものでしょうか(Outlookとか)
>で、cgiで何か処理をしていてその結果なりをメールで送るということで
>いいですか?
Outlookです(多分全て)。

>使っているPerlのスクリプトでは use encoding 'cp932' (もしくは 'shiftjis'など)をしていますか?
してません。
use encoding 'cp932'した場合は、何が起こるですか?
以前、use encoding 'utf8'で統一しようとしたら、何か挙動がおかしくてやめた事があります。

>次に
>> アイウエオワヲン\x{2460}\x{2171}\x{3231}\x{2121}\x{9ad9}\x{fa10}$(D<t\x{fa11}\x{5fb7}
>...
>のようですがそういうデータですか?
>$(D< が分からないのですが、ひょっとして半角かなですか?
(1)ⅱ(株)Tel髙塚彅﨑德を変換した場合(だったと思います)です。

Encode::from_to($msg,'cp932','jis');
Jcode::convert(\$msg,'jis','jis','z');
としたらなりました。

最初に
Jcode::convert(\$msg,'cp932','cp932','z');
とした場合は、何もおきない(半角カナはそのまま)でした。

補足日時:2006/07/24 10:10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!