- 締切済み
機種依存文字(株)を入力すると\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}/(株)/; などで(株)に変換するとかいう対策ができるかと思いますが、 はしご高などはお名前に使われる文字ですし、そのまま送信したいのです。 よろしくお願いします!
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- sakusaker7
- ベストアンサー率62% (800/1280)
use utf8していると、utf8フラグと向き合うことになりますので 引っかかりやすい部分はあると思います。 具体的にどのようなコードを書いてどんなエラーが出たとか補足していただけますか? #!/usr/bin/perl # -*- coding: utf8 -* use strict; use warnings; use Fatal qw(:void open close); use feature ':5.10'; use utf8; use Encode qw/from_to decode encode/; binmode STDIN, ':bytes'; my $str = "