プロが教えるわが家の防犯対策術!

下記のperlのソースで出カさせると文字化けをする。
windows7でutf8で書いています。
mysqlの設定はutf8になっています。

print文で漢字以外は正常ですが、漢字の部分が文字化けをします。
修正個所を指摘願います。

宜しくお願いします。

use Encode;
use utf8;
use open IO => ":encoding(cp932)";
binmode STDOUT,':utf8';

# DBIモジュールを読込む
use DBI;
# データベース名を設定
$database = "mail";
# ホスト名を設定
$hostname ="localhost";
# ユーザ名を設定
$user = "****"; # データベースにパスワードを設定していれば指定
$password = "****";

# データベースのオブジェクトを作成して接続
$dsn="DBI:mysql:database=$database:host=$hostname";
$dbh = DBI->connect($dsn,$user,$password);

$rs = $dbh->prepare("select * from mail limit 100;");
$rs->execute();

# 取得したレコードセットの数だけループして表示
while(($mail,$id) = $rs->fetchrow()) {
print join("|",$mail,$id),"\n";
}
# レコードセットを閉じる
$rs->finish;
# データベースを閉じる
$dbh->disconnect;
exit;

A 回答 (3件)

binmode STDOUT,':utf8';


ってどういう意味かね?
    • good
    • 0
この回答へのお礼

有難う御座いました。

自己解決をしました。
どうやら、utf8フラグが落ちていたのが原因の様です。
Encode::decode('utf8',

上記の処理で落ちていたフラグを付加して正常になりました。

有難う御座いました。

お礼日時:2016/01/22 09:16

>下記の様にsubject以降が文字化けをしています。



元がメールならばMIMEエンコードされていたりしませんか?
まぁ、メールだとするといろいろヘッダが足りないかもしれませんが。

perlではなく、コマンドでDBから取得したらどんなバイナリになるんでしょう?
    • good
    • 0
この回答へのお礼

有難う御座います。

下記は、cp932で書いています。
下記は正常に出カします。

utf8でperlは書きたいのですが、何処がおかしいのでしょうか。

# DBIモジュールを読込む
use DBI;
# データベース名を設定
$database = "mail";
# ホスト名を設定
$hostname ="localhost";
# ユーザ名を設定
$user = "***"; # データベースにパスワードを設定していれば指定
$password = "****";

# データベースのオブジェクトを作成して接続
$dsn="DBI:mysql:database=$database:host=$hostname";
$dbh = DBI->connect($dsn,$user,$password);
$dbh->do("set names sjis");

# 取得したテーブルにリレーションで都道府県名を追加している
$rs = $dbh->prepare("select * from mail limit 100;");
$rs->execute();
# 取得したレコードセットの数だけループして表示
while(($mail,$id) = $rs->fetchrow()) {
print join("|",$mail,$id),"\n";
}
# レコードセットを閉じる
$rs->finish;
# データベースを閉じる
$dbh->disconnect;
exit;

お礼日時:2016/01/21 19:18

「print文で漢字以外は正常ですが、漢字の部分が文字化けをします。

」というのは, どのように確認したんでしょうか?
    • good
    • 0
この回答へのお礼

出カの一部を抜粋します。
最初は、漢字では有りません。この部分は正常です。
その後に漢字が出ます。
Return-Path: mailmag-0001529850@receive.mag2.com|490313
Received: from z-oha-vzmta051-sv.z-seg.bbiq.jp (LHLO|490314
z-oha-vzmta051-sv.z-seg.bbiq.jp) (10.1.55.95) by|490315
z-oha-vzmbs151-sv.z-seg.bbiq.jp with LMTP; Mon, 20 Apr 2015 21:50:35 +0900|490316
(JST)|490317
Received: from localhost (localhost [127.0.0.1])|490318
by z-oha-vzmta051-sv.z-seg.bbiq.jp (Postfix) with ESMTP id 25343A4841|490319
for <usui@ori.bbiq.jp>; Mon, 20 Apr 2015 21:50:35 +0900 (JST)|490320
X-Spam-Flag: NO|490321
X-Spam-Score: 1|490322
X-Spam-Level: *|490323
X-Spam-Status: No, score=1 tagged_above=-10 required=6.6 tests=[dummy=1]|490324
autolearn=no|490325
Authentication-Results: z-oha-vzmta051-sv.z-seg.bbiq.jp (amavisd-new);|490326
dkim=pass (1024-bit key) header.d=mag2.com|490327

下記の様にsubject以降が文字化けをしています。

Subject: ????BBIQ?STEP?????????????300MB???|34
|35
|36
Subject: 【重要】BBIQ「STEPプラン」通信量のお知らせ(300MB超過)


■□■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■□■

お礼日時:2016/01/21 18:56

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