• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:NEC機種依存文字を許すメールの送信)

NEC機種依存文字を許すメールの送信

このQ&Aのポイント
  • NEC機種依存文字を許すメールの送信について

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

「思ったように送信できない」ではなくもうちょっと具体的に症状を書いてください。 メール送信に使うということなので、ISO-2022-JPに変換しているんじゃないかと 思いますが、これはお使いになりたい文字群を含んでいない集合です。 ですから、from_toやconvertを通した時点でゲタ文字になるとかになってしまう ような気がするのですが違いますか? それから、ISO-2022-JPで送る限りにおいては、半角カナを使った場合 どうなるかは経路や受け手のソフトウェア(OSの問題ではありません)の振る舞いに よるので、なにが起こっても文句は言えません。 UTF-8で送るという手段は取れませんか? まあ受けてのメーラーが対応してないとダメですけど。

fumufumu_2006
質問者

補足

ありがとうございます。 >「思ったように送信できない」ではなくもうちょっと具体的に症状を書いてください。 色々の組み合わせでやってみたのですが、 アイウエオワヲン\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特殊文字の処理を、入力拒否で無い方法で処理する方法をどなたか教えて下さい。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

調べてみました(時間がないので中途半端ですが)。 まず、 半角カナ→全角カナ変換は 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についてお尋ねしたのは、それがあるとないとで事情が変わるからです。 お書きの通り、これやってると副作用がでかいので。 疑問等あれば補足に書いてください。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

ちょっと整理させてください。 クライアントのメールソフトは決まったものでしょうか(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)までを対応する全角かな に置き換えるということで対処できるかも知れません。このとき、 カ゛→ガ をカ→カより先にやるとか注意が必要かもしれません。

fumufumu_2006
質問者

補足

>クライアントのメールソフトは決まったものでしょうか(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'); とした場合は、何もおきない(半角カナはそのまま)でした。

関連するQ&A