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

このQ&Aのポイント
  • NEC機種依存文字を許すメールの送信について
回答を見る
  • ベストアンサー

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

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

  • Perl
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • 文字コード変換

    送信元のページがShift_JISの場合は正常に動作するのですが、 UTF-8等の場合は文字化けしてしまいます。 &jcode'convert(*val, 'sjis'); ↑のものを use Encode; Encode::from_to( $val, "UTF8", "Shift_JIS", Encode::XMLCREF ); このように書いたところ、UTF-8も文字化けしないのですが、 コードを自動的に認識して自動で振り分けさせる方法がわかりません。 サーバーのPerlのバージョンは5.8.6です。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 機種依存文字の文字コード変換

    現在、Shift-JISでCGIを作成しています。言語はPerlです。HTMLファイルから送信された文字をDBに登録するのですが、CGIをShift-JISで作成しているのに、DBがEUCとなっているため、jcode.plを利用して文字コードを変換しています。 しかし、文字が機種依存文字である場合、jcode.plでは文字コード変換ができないようで文字化けを起こした文字をDBに登録しようとしてエラーを起こしてしまいます。 何とか機種依存文字をコード変換したいのですが、可能でしょうか?

    • ベストアンサー
    • Perl
  • メールフォームで文字化けが出る

    http://okwave.jp/qa5038084.htmlの引き続きです。(メールフォーム) <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; ↓ sjis関連をutf8に書き換え、jcodeの頭文字をJに書き換え <meta http-equiv="Content-Type" content="text/html;charset=utf8"> &Jcode'h2z_utf8(*contenido) &Jcode'convert(*subject,'utf8'); &Jcode'convert(*infor,'utf8'); &Jcode'convert(*contenido,'utf8'); &Jcode'convert(*res_msg,'utf8'); print "Content-type: text/html;charset=shift_utf8\n\n"; require 'jcode.pl'をuse Jcode;に書き換え ※jcode::" となっている箇所はありません 結果 メールフォームはエラーや文字化けは出なくて成功しましたが、メール受信の際、ThunderbirdPortableメーラーでは全て文字化け(文字エンコーディングは「日本語ISO-2022jp」となっています)、ウェブメールのgmailでは内容は文字化けになっていませんが、タイトルが文字化けになっています。 どこが悪かったのでしょうか? 宜しくお願いします。

    • 締切済み
    • CGI
  • メールを文字化けしないようにしたい

    次のようにメールを送信しようとしています。 Fedora CoreはUTF-8なので、jcode.plでJISに変換しようとしています。 require "jcode.pl"; $subject = "テストメール"; $data = "これはテストメールです。"; &jcode::convert(\$subject,'jis'); &jcode::convert(\$data,'jis'); @str = "subject:$subject\n\n"); push (@str, "$data\n.\n"); これがなぜかうまくいきません。メーラーの文字コードをutf8にすると正常に表示されます。 使い方が違うのかと思ったので、次のように変えてみたところ、エラーになりました。 &jcode::convert(\$subject,'utf8','jis'); また、先頭にuse utf8;を付けてみたところ、送信できたものの文字化けが余計ひどくなりました。 インターネットで検索したり本を読んでみたりしても、よくわかりませんでした。 どうやったらJISに変換できるのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 特定文字での文字化け

    DB(oracle)から抽出したものをPerl5でcsv出力しているのですが、特定文字で文字化けが起こってしまいます。 特定文字というのが、シフトJISの「拡張文字」と言われているものにあたるらしく、 0xED40~0xED9Eとか0xFA40~0xFA9Eとかです。 0xED40→ス、0xED9E→シ、0xFA40→。、0xFA9E→.となってしまいます。(文字を出したかったのですが、表示されなかったので文字コードにしました。) $strをDBより抽出した文字列として jcode::convert( \$str, "euc" ); : :(文字列の区切り処理) : jcode::convert( \$str, "sjis" ); ということをやっています。 以前、 &jcode'convert( $str, "euc" ); : :(文字列の区切り処理) : &jcode'convert( $str, "sjis" ); とやっていたのですが、この場合、 「半角カナ+文字コードが7cを含む文字」 が文字化けを起こしていました。 これを修正するために前者のような修正をしたのですが、 間違っているのでしょうか? すみませんが、よろしくお願いします。

  • 半角カナ文字と特殊文字の変換

    半角カナ文字と「丸で囲まれた1」や「はしご高」等の特殊文字を SJISからJISへ、JISからSJISへ変換する方法を調べています。 半角カナはJISにないという記述も見たのですが、 サクラエディタで双方へ変換できるのと、 Outlookへ半角カナで送信したところ文字化けせず(全角になっていましたが) 受信できたこと、「はしご高」は受送信で文字変換されているようなので、 何か方法があるのではないかと調べています。 方法や参考資料を教えていただければと思います。 よろしくお願いいたします。

  • PHPで指定文字数で切りたい場合

    PHPで、全角と半角の混在した文字列で 全角=1文字、半角=0.5文字として換算した文字数を切り詰めたい場合は どうすれば良いのでしょうか?? 改行コードなどもカウント出来たら尚良いです! 環境は PHPのソースコードはutf-8 入出力はShift-jis ・mb_substrは、半角も1文字とカウントされてしまいます ・mb_strimwidthは、文字幅なので今回は使い物になりません ・mb_strcutはなぜかうまく動いてくれません $str = mb_convert_encoding($str,'shift-jis','utf-8'); $str = mb_strcut($str,0,1000,'shift-jis'); $str = mb_convert_encoding($str,'utf-8','shift-jis'); 500文字になるのを期待したが、出力された文字は512文字になってしまった 全角=1文字、半角=0.5文字の検証は以下のサイトにて行いました http://www.luft.co.jp/cgi/str_counter.php お忙しい中恐縮ですが、 わかる方お教えくださいませ!

    • ベストアンサー
    • PHP
  • 置換の順番について

    置換する目的は 半角カナを全角カナにする事なのですが、そこで問題が生まれました。 sjisに変換した後に、置換をすると文字化けになり、反対にする事によって正常に置換する様になっています。良くそこの仕組みが分からないのですがどうか教えて頂けないでしょうか?宜しくお願いします。 ###参照プログラム### ★#半角文字を全角文字に置換するケース &jcode::h2z_sjis(\$value); &jcode::convert(*value, 'sjis'); ★#文字化けを起こすケース &jcode::convert(\$value, 'sjis'); &jcode::convert(\$str, 'euc'); print "str : $str<br>\n";

  • 機種依存文字(株)を入力すると\x{3231}に変換される

    入力フォームより入力した文字を7bit-JISに変換してメールで送信するスクリプトをutf8で書いております。 eucでスクリプトを書いておりました時はjcode.plでJISコードに変換すると、(株)や髙の文字もそのままメールで送られておりました。 今回utf8でスクリプトを書きなおしますと、 (株)(一文字の機種依存文字のです) → \x{3231} 髙 → \x{9ad9} に変換されます... どのようにすると、このような機種依存文字もそのまま送信することができるでしょうか? スクリプトは下記のような感じです.. -------------------- use utf8; use Encode; use Encode::Guess; binmode STDIN, ':bytes'; require 'mimew.pl'; # $Mail_Head : メールヘッダ # $Mail_Data : フォームより入力された文字列 #JISコードに変換 $Mail_Data = &to_jis($Mail_Data); $Mail_Real = $Mail_Head.$Mail_Data; # メール送信 open(MAIL,"|$SendMailPath"); print MAIL $Mail_Real; close(MAIL); exit; sub to_jis { my $text = $_[0]; # ~、-など文字化け対策 $text =~ tr/[\x{ff5e}\x{2225}\x{ff0d}\x{ffe0}\x{ffe1}\x{ffe2}]/[\x{301c}\x{2016}\x{2212}\x{00a2}\x{00a3}\x{00ac}]/; return encode ('7bit-jis', $text); } -------- \x{3231}は $text =~ s/\x{3231}/(株)/; などで(株)に変換するとかいう対策ができるかと思いますが、 はしご高などはお名前に使われる文字ですし、そのまま送信したいのです。 よろしくお願いします!

  • 機種依存文字

    いつもお世話になっております。 機種依存文字について質問させていただきます。 CSVファイルをアップロードして、文字コードがEUCのデータベースに 格納したいと思っております。(PHPの文字コードもEUCになっております。) 「(はしごたか)」「(たつさき)」などの機種依存文字が 文字化けをしてしまいます。 $name = mb_convert_kana(mb_convert_encoding($data[1], "EUC-JP", "Shift-JIS"), "KV") $name = mb_convert_kana(mb_convert_encoding($data[1], "eucJP-win", "Shift-JIS"), "KV") としても文字化けをしてしまいます。 また、以下の設定をしても文字化けは解消されません。 ini_set('default_charset', 'eucJP-win'); ini_set('mbstring.http_output', 'eucJP-win'); ini_set('mbstring.internal_encoding', 'eucJP-win'); 皆様、ご提示お願いいたします。 よろしくお願いいたします。 <環境> OS:Red Hat Linux PHP:Version 4.3.1 DB:MySQL 3.23.56

    • ベストアンサー
    • PHP

専門家に質問してみよう