※ ChatGPTを利用し、要約された質問です(原文:Perlで変数内の日本語が文字コードに変換される)
Perlで変数内の日本語が文字コードに変換される
このQ&Aのポイント
PerlでDBIを使用し、データベースのテーブルAに対してSelectした場合に、fetchrow_hashrefを使用しSelect結果を取得した場合に、テーブルの列名が文字ではなく文字コードが格納されてしまいます。
hashrefを使いたい理由はテーブルの列順番が変わった場合でもプログラム上の変更を減らすために、列名にて参照したいためです。
データベースはPostgreSQLの8.2で日本語文字に対応していることは、自分でselectなどのコマンドを叩き確認済みです。
お世話になります。Googleやbingなどで調べて見ましたが検討もつかず困っております。
PerlでDBIを使用し、データベースのテーブルAに対してSelectした場合に、fetchrow_hashrefを使用しSelect結果を取得した場合に、テーブルの列名が文字ではなく文字コードが格納されてしまいます。
テーブルAの列名はUTF-8の日本語文字になります。
以下、列名
ID|登録者|登録日
fetchrow_hashrefを使用した場合、以下のように返ってきます。
$VAR1 = {
"\x{767b}\x{9332}\x{8005}" => '106.190.xxx.xxx',
"\x{767b}\x{9332}\x{65e5}" => '2012-05-06 00:52:40.39496',
'id' => 38
};
問題は目的のデータに対して列名('登録日'など)で参照する事が出来ない事ですが、今のままテーブルの列名は日本語のままで回避する方法をご教授いただけないでしょうか?
hashrefを使いたい理由はテーブルの列順番が変わった場合でもプログラム上の変更を減らすために、列名にて参照したいためです。ですのでarray系の取得メソッドはなるべく使わないようにしたいです。
出来ればなぜこのようなことが起こるのか原因も含めてご教授いただけると大変助かります。。
ちなみに、データベースはPostgreSQLの8.2で日本語文字に対応していることは、自分でselectなどのコマンドを叩き確認済みです。
ヒントでもかまいませんので、どうかよろしくお願いいたします。
お礼
ご回答ありがとうございます!
補足
ソースコード事態はUTF8で記述していましたので、 use utf8;にする事で取得出来ることが出来ました! ありがとうございます! ただ・・・。取得することが出来ましたが、取得した値が日本語の場合は、逆に文字化けしてしまいました。。。 ちなみに、use utf8;をコメントアウトし、fetchrow_arrayrefにて取得すると、文字化けは起こらなかったのでutf8をuseすることによって値に何らかの加工をしているみたいですが、、、ご存知でしょうか?? ちなみに、utf8フラグがついているからかな?と思い utf8::encode にて調べてみましたがfalse値が返ってきていました。。。