perl 5.8.6を使用しています。
MySQLから取り出したデータを、ソース中の文字列と同じprint文の中で
表示させようとした場合に文字化けしてしまいます。
文字コードはMySQL, ソースファイルともUnicode(UTF-8)を使用しています。
具体的には
$a[0]
にデータベースから取り出した文字列が入っているとすると、
ソース中で
print "テスト:$a[0]";
とか
print <<END_OF_TEXT;
テスト:$a[0]
END_OF_HTML
とすると、$a[0]の部分が文字化けしてしまうのですが、
print "テスト:";
print "$a[0]";
と書くと、文字化けせずに表示されます。
ちょっと日本語を使ったり、データベースから取り出した文字列を使う箇所が多いプログラムなので、ひとつひとつprint文を分けるのは大変なので避けたいです。
何か文字化けしない回避策や、原因について考えられることがありましたら教えていただけると大変助かります。
No.2ベストアンサー
- 回答日時:
こんにちは、
MySQLは実験してませんが、外部からきたUTF-8な文字列のつもりで、
UTF-8.txtに
日本語
と一行書いて、UTF-8N で保存。
以下のスクリプトを実行すると、
#! /usr/bin/perl
use 5.8.0;
use strict;
use warnings;
use utf8;
use Encode;
open my $fh , '<' , "utf8.txt" or die;
my $line = <$fh>;
my $data = '日本語';
$line = decode('UTF-8' , $line);
print encode 'shiftjis' , << "EOD";
読み込んだデータは:$line
スクリプト内で定義したデータは:$data
EOD
__END__
読み込んだデータは:日本語
スクリプト内で定義したデータは:日本語
と表示されます。(ActivePerlなので print 時は shiftjisです。)
>$line = decode('UTF-8' , $line);
この行が無かったら文字化けします。
もしかしたら、MySQLから取得したデータを decode したら良いかもです。
はずしてたらごめんなさい。
ご回答ありがとうございます。
試してみたところ、
$line = decode('UTF-8' , $line);
とすることで、文字化けしなくなりました!
UTF-8文字列でもUTF-8文字列としてdecodeするといいのですね。
ありがとうございました。
No.4
- 回答日時:
多分utf8フラグの問題だと思います。
#2,3の方の回答にあるようにすれば大丈夫だと思いますが、
入出力がすべてutf8なら、今回はuse Encodeは必要ないです。
utf8フラグをつければいいだけなので
DBからとってきたデータ($stringとします)
に対して
utf8::upgrade($string);
をしてみてください。
一応念のための確認ですが
> print "テスト:";
> print "$a[0]";
> と書くと、文字化けせずに表示されます。
ここで
print utf8::is_utf8($a[0]);
としたときの出力はどうなっていますか?
ご回答ありがとうございました!
utf8::upgrade($string);
を試してみたのですが、症状は改善されませんでした。
>ここで
>print utf8::is_utf8($a[0]);
>としたときの出力はどうなっていますか?
こちらについて試してみたところ、何も出力されませんでした。
試しにutf8::upgrade($a[0]);
をしてみた後に、print utf8::is_utf8($a[0]);をすると
1が出力されました。
ただ、文字化けは依然として残っているようでした。
No.3
- 回答日時:
こんにちは、#2です。
思いっきり間違ってました。
>UTF-8.txtに
>日本語
>と一行書いて、UTF-8N で保存。
じゃなくて、utf8.txt です。ファイル名を間違ってました。
あと、スクリプトももちろん UTF-8N で保存です。
すみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- Perl perlについての質問 2 2022/10/17 15:25
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTML::Templateでutf-8のテンプ...
-
perl について
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
英数字のみ全角から半角に変換
-
プログラミングでは、半角括弧...
-
IEからEdgeへの移行に伴うIMEの...
-
VBA 置換文字がみつからない時
-
「何とかで始まり、何とかで終...
-
CString から LPCTSTRの型に変換
-
Excel VBAでPDFファイルをMicro...
-
エクセルにMicrosoft Barcode C...
-
csvデータ ダブルクォーテ...
-
カンマ区切りの数字をCSVフ...
-
EXCELからCSVにすると余計なカ...
-
word差し込み印刷 半角カタカ...
-
SJIS->UTF8->SJISコード変換に...
-
正規表現で、特定の文字列を含...
-
VBで、String型のデータが、...
-
マクロを使ってフォルダー内に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl でエラー:Wide character...
-
【LaTeX】pBibTeXでのエラーの...
-
MFCのコントロールにUTF-8の文...
-
jcode.plのかわり
-
【文字コード】外見上は全く同...
-
デバッグ情報が文字化けする
-
UTF-16からUTF-8への変換
-
機種依存文字(株)を入力すると\...
-
今更ながらdbmopenでutf8環境に...
-
sedやperlでの2バイト文字を含...
-
perlについての質問
-
CGIでメール送信で件名文字化け
-
Java+MySQLで特殊文字(丸数字(...
-
Jcode.pmでconvertできない
-
WWW::Mechanizeの文字コードに...
-
HTML::Templateでutf-8のテンプ...
-
Perlで、文字の出現回数を調べ...
-
カタカナ一覧表が知りたい
-
WindowsでUTF-8のPerlスクリプ...
-
UTF-8 フラグ?で文字化けしま...
おすすめ情報