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

入力フォームより入力した文字を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}/(株)/;
などで(株)に変換するとかいう対策ができるかと思いますが、
はしご高などはお名前に使われる文字ですし、そのまま送信したいのです。
よろしくお願いします!

A 回答 (3件)

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 = "";#たぶんokwaveで変換しちゃうだろうけどはしご高。
my $outstr = encode('7bit-jis', $str, Encode::FB_PERLQQ);
say $outstr; #→ \x{9ad9}

#echo |nkf -S -j|hexdump
#00000000: 1B 24 42 7C 62 1B 28 42 0A .$B|b.(B.

$outstr =~ s/\\x\{9ad9\}/\x1b\x24\x42\x7c\x62\x1b\x28\x42/;
say $outstr;

こんな感じで、JISっぽい文字列にはしご高を埋め込めてます。
上記の出力を再度 nkf に食わせてsjisに戻すとsjisのはしご高になります。
    • good
    • 0

>ところでEncodeではよっぽどがんばらないと(?)無理なんでしょうか...



配布されている状態のものではだめだと思います。
変換した後に、直接必要なパターン(あらかじめ求めておきます)に置換すれば可能でしょうけど。

リリースノート (Perl-Encode-ISO2022JPMS - 0.1) - Legacy Encoding Project - SourceForge.JP
http://sourceforge.jp/projects/legacy-encoding/r …

このモジュール(Encode::ISO2022JPMS)を入れるか、あるいは同様のことを自分でやるというのも
あるとは思いますが、それを質問者さんが許容できるかはちょっとわかりませんのでなんとも。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。

>変換した後に、直接必要なパターン(あらかじめ求めておきます)に置換すれば可能でしょうけど。

はじめ
http://ziddy.japan.zdnet.com/qa2291426.html?ans_ …
にsakusaker7さんが書いていらっしゃる1~4の手順でやってみようとしたのですが、どうもできなくて...use utf8してるからでしょうか...?
Japaneseモジュールの使用で問題ないのですが、自分の勉強のためにやり方を知りたいと思いましたもので。

お礼日時:2008/11/17 09:09

面倒くさいので詳細は省きますが、Encodeモジュールではなく


Unicode::Japanese などを使って変換すればいけそうな。

Unicode::Japanese - 日本語文字コード変換
http://tech.ymirlink.co.jp/perl/cpan/Unicode/Jap …
    • good
    • 0
この回答へのお礼

下記でできました!ありがとうございます!
use Unicode::Japanese;
sub to_jis {
my $text = $_[0];
$text = encode ('utf8', $text);
return Unicode::Japanese->new($text)->jis;
}
ところでEncodeではよっぽどがんばらないと(?)無理なんでしょうか...

お礼日時:2008/11/14 11:16

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