メール送信で丸数字の文字化けについて

このQ&Aのポイント
  • ウェブページ(charset=utf-8)からメールを送信するプログラム(Perl)について質問があります。本文中に丸数字が文字化けしてメールが届いてしまいます。
  • 質問者はUTF-8のページからCGIでパラメータを受け取り、一部の特殊文字を置換してメールを送信していますが、丸数字についてはうまくできていません。
  • パラメータの受け取り方法に問題があるのか、丸数字の置換方法に問題があるのかを質問者は調査していますが、上手くいっていません。相談をお願いします。
回答を見る
  • ベストアンサー

メール送信で(1)などの丸数字の文字化けについて

ウェブページ(charset=utf-8)からメールを送信するプログラム(Perl)について質問があります。 本文中に ---------- (1) ↓ \x{2460} ---------- と変換されてメールが届いてしまいます。 メインのCGIでは、 use utf8; を宣言しています。 utf-8のページから、CGIではパラメータを以下のように受けています。 my $query = new CGI; for my $p ($query->param) { my @v = map {Encode::decode_utf8($_)} $query->param($p); $query->param($p, @v); } my $mailtext = $query->param("mailtext"); その後、 「~(波ダッシュ)」と「-(全角マイナス)」は以下のようにを強制的に置換しました。 (これは検索して見つけることができましが、丸数字については探しきれませんでした。) $mailtext =~ tr/\x{ff5e}\x{ff0d}/\x{301c}\x{2212}/; # UTF8フラグをON $mailtext = Encode::decode_utf8($mailtext ); # UTF8からJISに変換 Encode::from_to($mailtext , "utf8", "jis", Encode::XMLCREF); としてメールを送信しています。 パラメータの受け取り方に問題があるのでしょうか? それとも丸数字などを個別に置換する方法があるのでしょうか。 色々調べて試したりしたのですがダメでした。 すみませんが、よろしくお願いいたします。

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

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

丸数字はJISコードで定義されてないので、括弧1等に置換するしかない。 s/\x{2460}/(1)/ とかでしょうか。

その他の回答 (1)

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.1

ない袖は振れない。 Wikipedia で『丸数字』を検索!

関連するQ&A

  • Perl メール文字化け

    #メール本体設定 my $start = '~ホームページより以下の内容を受け取りました~'; my $Name =$q->param('Name'); if($Name eq ""){ print "Content-type: text/plain; charset=Shift_JIS\n\n"; print "名前が入力されていません。\n\nブラウザの戻るボタンで戻ってください。"; exit(1); } my $Sex =$q->param('q1'); my $Age =$q->param('q2'); my $ie =$q->param('ie'); my $Tell =$q->param('Tell'); my $body = $q->param('body'); if($body eq ""){ print "Content-type: text/plain; charset=Shift_JIS\n\n"; print "本文が入力されていません。\n\nブラウザの戻るボタンで戻ってください。"; exit(1); } #my $subject = $q->param('subject'); my $End = '~~~~~~~~~~~~~~~~~~~~~'; #メール送信オブジェクト設定 my $smtp = Net::SMTP->new('n-doboku.jp'); if ( !$smtp ) { print "メールサーバーにアクセスできません!"; exit; } #メール文字コード変換 Encode::from_to($start, 'shiftjis', 'iso-2022-jp'); Encode::from_to($Name, 'utf8', 'shiftjis'); Encode::from_to($Sex, 'utf8', 'shiftjis'); Encode::from_to($Age, 'utf8', 'shiftjis'); Encode::from_to($ie, 'utf8', 'shiftjis'); Encode::from_to($Tell, 'utf8', 'shiftjis'); Encode::from_to($body, 'utf8', 'shiftjis'); Encode::from_to($End, 'shiftjis', 'iso-2022-jp'); #メール送信 $smtp->mail($from); $smtp->to($mailto); $smtp->to($mailcc); $smtp->data(); $smtp->datasend($header); $smtp->datasend("$start\n\n"); $smtp->datasend("名   前 : $Name\n\n"); $smtp->datasend("性   別 : $Sex\n\n"); $smtp->datasend("年   齢 : $Age\n\n"); $smtp->datasend("住   所 : $ie\n\n"); $smtp->datasend("電話番号 : $Tell\n\n"); $smtp->datasend("本   文 : $body\n\n"); $smtp->datasend("$End\n\n"); $smtp->dataend(); $smtp->quit; 現在、 SMTPを使用しメール送信を作成している最中です。 やっと、パソコンからパソコンへメール送信では文字化けしなくなったのですが まず (1)パソコンでも異字体などは文字化けしてしまう(髙や﨑等) おそらく「Content-Transfer-Encoding: 8bit」これを使うのですが、使いかたがわからないです・・・ (2)スマホにメール送信したときはすべて文字化けしてしまうのですが、 スマホでの文字コードとはなんなのでしょうか・・・? また、一回utf8に変換しているのですが、この場合どうするのでしょうか・・・?

    • ベストアンサー
    • Perl
  • utf8使用時のフォーム入力文字コード

    use utf8; binmode(STDIN,":encoding(shiftjis)"); をすると、入力時に内部変換がかかり、UTF-8として扱える という認識で使っていたのですが、下記のコードを実行してみると 入力した文字は普通に sjisで表示されます。 binmode(STDIN~ はどのような意味を持つのでしょうか。 http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html http://www.hikoboshi.org/perl/doc/encode.html 他、いろいろなサイトで調べてみたのですが、いまひとつ 納得する回答を得ることができません。 //////////////////////////////////////////////////// use utf8; use open 'encoding(utf8)'; binmode(STDIN,":encoding(shiftjis)"); use CGI; print "content-type:text/html; charset=Shift_JIS \n\n"; print <<"EOM"; <form action="xxx.cgi"> <input type="text" name="hoe"> <input type="submit"> </form> ここは UTF-8文字列なので化ける<br> EOM $cgi = CGI->new; print $cgi->param('hoe'); //////////////////////////////////////////////////// 現在は下記のコードで自前で UTF-8に変換しています //////////////////////////////////////////////////// foreach( $cgi->param() ){ my $str = $cgi->param($_); $str = Encode::encode('utf-8', Encode::decode('shiftjis', $str)); $cgi->param( -name=>$_, -value=>$str ); }

    • ベストアンサー
    • Perl
  • Encodeについて

    こんにちは。いつもお世話になっております。 Encodeモジュールについて質問です。インプレスジャパンから出版 されている「まるごとPerl」にEncodeについて読みましたが、理解 できていないのか、いざスクリプトを書くとうまくいきません。 練習として記述し、utf-8で保存したのが下記です。 use strict; use warnings; use Encode; my $test='文字化けしやすい漢字です。表圭臀能'; my $moji=decode('utf-8',$test); my $ans=encode('utf-8',$moji); print "Content-type: text/html;charset=utf-8\n\n"; print <<EOH; <html> <head> <META http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Encode</title> </head> <body> <p class="moji">$ans</p> </body> </html> EOH そもそも、スクリプトをshift_jisで保存したときに文字化けが 起きないようにしたかったので、上記のスクリプトを変えて、 my $moji=decode('shift_jis',$test); my $ans=encode('utf-8',$moji);  そしてshift_jisで保存して実行してみましたが、ブラウザには 何も表示されません。 どこが間違っているのか、教えて頂ければ幸いです。 かなり初歩的な内容だと思いますが、どうぞよろしくお願い申し上げます。

    • ベストアンサー
    • Perl
  • 文字変換について

    Perlの文字変換について質問があります。 文字コードをJISからShift_JISに変換するには、下記のどれが正しい記述なのでしょうか? ・Encode::from_to($_, "jis", "shiftjis" ) ・encode("shiftjis", $_) ・encode("shiftjis", decode("utf8", $_)) 以上、よろしくお願い致します

    • ベストアンサー
    • Perl
  • 機種依存文字(株)を入力すると\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}/(株)/; などで(株)に変換するとかいう対策ができるかと思いますが、 はしご高などはお名前に使われる文字ですし、そのまま送信したいのです。 よろしくお願いします!

  • Perlの文字コード変換についての質問です。

    Perlの文字コード変換についての質問です。 ホームページ全体は、UTF-8で作成されています。 そのため、$qsは、どうも、S-JISのようなので、UTF-8に変換して URLデコードさせたいのですがうまくいきません。 文字化けしないで、UTF-8で作成されたページに表示させたいのですがどうすればよいでしょうか? 宜しくお願い致します。 ------------------------------------ $qs = $ENV{'QUERY_STRING'}; use Encode::Guess qw/ shiftjis /; use Encode qw/ decode /; $enc = guess_encoding ( $qs ); if ( ref $enc ) { $utf8 = decode ( $enc->name , $qs ); } $qs =~ tr/+/ /; $qs =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; print "$qs";

    • ベストアンサー
    • Perl
  • ファイル出力時、ファイル名が文字化けする

    Windows上から持ってきたファイルのファイル名ををLinux上のperlプログラムでdecode(perlの内部用文字に変換)してから最終的にutf8に変換してファイル出力を行う下記プログラムがあります 下記コードの①のケースで出力したファイルの中身は文字化けしていないです。ところが②のケースで出力した場合、ファイルの中身は文字化けしていないのですがファイル名が文字化けします。 何か良い対策方法ありますでしょうか。 ------------------------------------------------------------- use utf8; use Encode qw(decode encode); $name = decode('cp932', $name); ←$nameはファイル名 $name = encode('utf8', $name); my $outpath = '/sample/test'; ← ①ファイルの中身は文字化けしていない。 my $outpath = '/sample/' . $name; ← ②ファイルの中身は文字化けしていない。ファイル名が文字化け。 opne my $fh '>', $outpath; print $fh $name; close($fh);

    • ベストアンサー
    • Perl
  • pythonのQRコードデコードで文字化け問題 2

    前回の質問、「pythonのQRコードデコードで文字化けなくす 」でカタカナ混じりのテキストで文字化けが起きるた場合の回避策として例外処理の方法を教えてもらいその結果をテキストファイルの形で出力するため下記コードにしてみました。 import pyzbar.pyzbar from PIL import Image qr = pyzbar.pyzbar.decode(Image.open('d:/QRcode/qrcode_make.png')) #print(qr) try: with open('d:/QRcode/QRcode.txt', 'w') as f: print(qr[0].data.decode('utf-8').encode('shift-jis').decode('utf-8'), file=f) except UnicodeDecodeError: with open('d:/QRcode/QRcode.txt', 'w') as f: print(qr[0].data.decode('utf-8'), file=f) 前回の「いろはイロハ色波」「さけサケ鮭」のQRコード共に問題なくデコード結果が出力されました。 そこで頭に絵文字を加えた場合や韓国語・アラビア語等コピペしたテキストでQRコードを作りデコードした場合デコード結果が エラー(UnicodeEncodeError: 'cp932' codec can't encode character '\u231a' in position 0: illegal multibyte sequence)のためか出力されません。 因みに import qrcode text = 'text' img = qrcode.make(text) img.save('qrcode_make.png') でQRコードを生成 教えてもらったデコードの例外処理をする下記コードの結果 print(qr) try: print(qr[0].data.decode('utf-8').encode('shift-jis').decode('utf-8')) except UnicodeDecodeError: print(qr[0].data.decode('utf-8')) 元テキスト:⌚さけサケ鮭 デコード結果:⌚さけサケ鮭 元テキスト:안녕 デコード結果:エラー(UnicodeEncodeError: 'shift_jis' codec can't encode character '\uc548' in position 0: illegal multibyte sequence encoding with 'shift-jis' codec failed) 例外処理をしない場合,デコード結果は「안녕」と読み込まれていました。 カタカナひらがな混じりのテキストを使う方に問題があるのかどうか分かりませんがせめて絵文字の場合だけでもテキストファイルへの正しく出力する方法をお教えください。

  • メールフォームが部分的に文字化けする

    お問い合わせメールフォームを作りました。 一部のお客様からのメールが部分的に文字化けします。 ========== E月E6日に宿泊させてぁEだきました� そE際E対応でどぁEても納得できなかった為メールしました� ========== メールフォーム自体は UTF-8 でエンコードしていて、メール送信の際に JIS にしています。 ========== <?php mb_language("Japanese"); mb_internal_encoding("utf-8"); [snip] $from_name = mb_convert_encoding($from_name, "JIS", "UTF-8"); $from_name = '=?ISO-2022-JP?B?'.base64_encode($from_name).'?='; $body = mb_convert_encoding($body, "JIS", "UTF-8"); [snip] $mail_true = @mb_send_mail($mailto, $subject, $body, $additional_headers); [snip]

    • ベストアンサー
    • PHP
  • メールフォームから自動返信される結果の文字が2回繰り返されます。

    perlでできたCGIメールフォームをカスタマイズしていますが、テストをすると、自動返信されるメールに、結果が一部、2重に表示されてしまいます。 尚、inputからパラメータを渡して、送信メールに反映できるようにしたいのです。 何度も試してみましたが、解決できませんでした。 この原因を探るにはどのあたりを疑っていけば早いでしょうか。 ざっくりでもかまいません。ヒントをいただけたら大変助かります。 全コードは難しいので、 疑わしいと思うコードと、カスタマイズの際追加した部分のコードのみ以下に掲載します。 よろしくお願いします。 ======================================================== ~ foreach my $key ($in->param) { my @list = $in->param($key); $in{$key} = join('/',@list); } ~ ======================================================== ~ my $q = new CGI; my $item_name = $q->param('item_name'); # HTMLテンプレート パラメータ $tmpl->param( 'type' => $type, 'item_name' => $item_name, 'error_count' => scalar keys %{$error_list}, ); ~ ========================================================

    • ベストアンサー
    • Perl