• 締切済み

Perl5.6.1での「5C」コードの文字化け対策について

Perl5.6.1でCGIを動作させています。 下記コードで「テーブルyyy」から「列xxx」を引っ張ってきて xxxのデータ(文字列)を変数test2に格納しようとしているのですが、 xxxのデータ(文字列)内に2バイト目が「5C」コードの文字(表・予・申など)が含まれる場合、「Can't call method "Fields" on an undefined value at C:\~~~.cgi line 行数」というエラーが発生してしまいます。 このエラー出力で表示される行数はtest2に文字列を格納する行で発生しているのですが、既存のPerl5.6.1のままでエスケープ・置換処理をどのように行えばよいのでしょうか。 以上、よろしくお願い致します。 use Win32::OLE; $db = Win32::OLE->new("ADODB.Connection"); $db->Open($conn); $test = $db->Execute("SELECT xxx FROM yyy WHERE zzz=aaa"); $test2=$test->Fields('xxx')->Value;

  • Perl
  • 回答数1
  • ありがとう数1

みんなの回答

  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.1

こんにちは $test = $db->Execute("SELECT xxx FROM yyy WHERE zzz=aaa"); ↓ $test = $db->Execute('SELECT xxx FROM yyy WHERE zzz=aaa'); でどうでしょうかね 未検証です

flolina
質問者

お礼

ご回答ありがとうございます。 上記を試しましたところ、5Cコード以外でもエラーが発生するようになってしまいました。 また、最後の行にquotemeta関数をつけてみましたが、 やはり5Cコードのみエラーが発生します。 $test2=quotemeta($test->Fields('xxx')->Value); 正直どう対処すればよいか全然わかりません・・・

関連するQ&A

  • 文字列を任意の場所で分割(split)したい

    CでCGIを書く上で、perlのsplit命令の代替になるようなライブラリを探しています。 www=xxx&yyy=zzz という引数をchar型の配列に入れ、それを & で分割し、次に = で分割して query[0].name = www; query[0].value = xxx query[1].name = yyy; query[1].value = zzz などと、perlと同等のことをさせたいのですが、文字列をその都度走査していたのでは処理が莫大になりそうなので、もしご存知であれば教えていただければと思います。

  • $XXX を含んだ文字列の評価

    '$XXX + $yyy' という文字列($XXXと$yyyは単なる文字列)を評価したものを別の変数に格納したいのですがどうすればいいでしょう。 <?php $XXX = 10 ; $yyy = 5 ; $str = '$XXX + $yyy' ; $ans = なんとか文字列を評価; echo $ans ; ?> 表示 -- 15

    • ベストアンサー
    • PHP
  • Perl MSSQLに接続してSQLのVer情報を

    すみません。素人です。 Perl MSSQLに接続してSQLのバージョン情報を取得したいです。 コードを実行すると下のようなエラーが発生します。 Can't use string ("1") as a HASH ref while "strict refs" in use at C:\testPerl\test.pl SQLServer Mangement Studioでクエリー(select @@VERSION)を実行すると下のような情報を取得できます。 ******** (列名なし) Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c) 1988-2008 Microsoft Corporation Workgroup Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1) ********* どうも取得したデータ構造の指定がまずいように思いますが、どうすれば取得できますでしょうか? コード ------------------- use strict; use warnings; use Data::Dumper; use Win32::OLE; use Data::Dumper::Concise; use Win32::OLE::variant; use Win32::OLE::Const 'Microsoft ActiveX Data Objects 2.0 Library'; # DBサーバー名とDB名設定 my $server = "localhost"; my $db = ""; my $id = "sa"; my $ps = "testSa"; # エラー時に本処理を中止し、Perlがエラーメッセージを出力し、本プロセスが終了する。 Win32::OLE->Option(Warn => 3); # SQL Server 認証設定 my $connStr = "Provider=sqloledb;". "Data Source=$server;". "Initial Catalog=$db;". "User ID=$id;". "Password=$ps;"; # DB接続 my $objDB = Win32::OLE->new("ADODB.Connection"); $objDB->Open($connStr); $objDB->{Errors}->{Count} and die "cannot connect '$connStr'"; my $rs = Win32::OLE->new("ADODB.Recordset"); $rs->Open("select \@\@VERSION", $objDB); print "取りあえずなんか出力しようと試みる----------1\n"; print "$rs->{Fields}"."\n"; print "$rs->{Fields}->{Count}"."\n"; print "$rs->{Fields}->{Count}->{Item}->{1}"."\n"; while(!$rs->EOF ){ print "$rs->{Fields}->{Count}->{Value}"."$rs->{Fields}->{Item}->{Value}\n"; $rs->MoveNext(); } print "取りあえずなんか出力しようと試みる----------1\n"; ## DB切断 $objDB->Close();

  • Perlの文字コード

    1-2年ほど前、Perl5.8でソース自体をUTF8N(LF)で記述するようになり、 以下のように書いていました。 use utf8; use encoding "utf8"; use Encoding; それからPHPに移り、PHPでは、ソースはEUC-JP、DBもEUC、HTMLに出力する際もEUC-JPで統一していました。 最近またperlを使い出して疑問に思ったのですが、 perlではどのような文字コードで統一すれば一番よいのかということです。 javascriptはUTFだと動作しない端末(ザウルス)などあり、 perlもEUC-JPで統一しようと考えています。 昔、UTF8にこだわったのは、おそらく 「構」という文字は5Cなので、 文字コードによる不具合(ソース,js,cssで)を避けるためと、流行のUTF8にしたと思います。 perlでEUC-JPで文字コード統一させるメリットデメリットが知りたいです。 最近perlで書かれたサイトでHTML出力がShift_JISだったのですが、perlソースもシフトJISかは知りませんが、Shift_JISで統一するデメリットが知りたいです。 あと、WEBでどの文字コードが現在主流で、今後どうなるかも知りたいです。 EUC-JPで安泰なら、話は早いですが・・・

    • ベストアンサー
    • Perl
  • perl 変数 代入

    恐れ入ります。 Perlで、フォームから送信して、変数に代入したいのですがうまくいきません。 print qq!<form action="./xxx.cgi" method="get">!; opendir(DIRHANDLE, "./xxx"); foreach(readdir(DIRHANDLE)){ next if /^\.{1,2}$/; print qq! <input type="checkbox" name="$_" value="$_"> <input type="submit" value="送信"></form> とし、ディレクトリ内のフォルダ名をnameに格納してxxx.cgiへ送信します。 xxx.cgi側では、 #!/usr/bin/perl use cgi; $form = CGI->new; として、送信されたデータを次々と代入したいのですが、どのようにしたらよいでしょうか。

    • ベストアンサー
    • Perl
  • 機種依存文字の文字コード変換

    現在、Shift-JISでCGIを作成しています。言語はPerlです。HTMLファイルから送信された文字をDBに登録するのですが、CGIをShift-JISで作成しているのに、DBがEUCとなっているため、jcode.plを利用して文字コードを変換しています。 しかし、文字が機種依存文字である場合、jcode.plでは文字コード変換ができないようで文字化けを起こした文字をDBに登録しようとしてエラーを起こしてしまいます。 何とか機種依存文字をコード変換したいのですが、可能でしょうか?

    • ベストアンサー
    • Perl
  • 文字化け

    下記のようなcgiスクリプトがあり、test1.cgi から リンクの test2.cgiを呼ぶと 「リンドウ」が文字化けしてしまいます。 文字化けしないようにするには、どうしたらいいでしょうか。 Perl cgi 初心者です。 --------test1.cgi----------------------------------------- #!/usr/bin/perl print "Content-Type: text/html; charset=EUC-JP\n\n"; $name="リンドウ"; print "name=$name<br>"; print "<a href=\"test2.cgi?aaa,${name},bbb\">test2.cgi</a>\n"; ---------test2.cgi------------------------------------------------- #!/usr/bin/perl print "Content-type: text/html; charset=EUC_JP\n\n"; $query = $ENV{'QUERY_STRING'}; print "query=$query\n";

    • ベストアンサー
    • CGI
  • 改行コード検索

    VB6.0について質問です。 ある文字列のデータの中にある改行コードをみつけ それを取り除いた文字データだけを取得したいのですがうまくいきません>< 現在実行しているコードは以下の通りです。 For ixA = 1 To Len(ds.Fields(tmp1).Value) If Mid(ds.Fields(tmp1).Value, ixA, 2) = vbCrLf Then MOJI = MOJI & Mid(ds.Fields(tmp1).Value, ixA, ixA - 1) & Mid(ds.Fields(tmp1).Value, ixA + 1, ixA) End If Next ixA 文字列を結合するところでわけがわからなくなりました><; 正しいコードか他のやり方をご存知の方ご回答よろしくお願いします!

  • perlのcgiが文字化けします。

    perlを使ったcgiを作ろうと思い、こんなプログラムを書いてみたのですが、htmlのタグに囲まれた部分の日本語が文字化けしてしましいます。ファイルの文字列は上手く表示できるのですが… どうすればいいでしょうか。 文字コード判別をしてみたところ、このプログラム自体はShift-JISで書かれているようです。 開いているファイルはutf-8のようです。 #!/usr/bin/perl #ヘッダの表示 print "Content-Type: text/html; charset=utf-8\n\n"; print "<html>\n"; print "<head><title>掲示板</title></head>\n";#これが文字化け print "<body>\n"; print "<input type=\"text\" name=\"mail\" size=\"20\" value=\"\"><br>\n"; print "メッセージ<br>\n";#これも文字化け my $File = 'party0339.html'; if (-e $File) { #####@ファイルを開く…上でファイルが存在してることを確認して開けない場合はエラーメッセージ open(FF,"<:utf8",$File) or die "ファイル:$File を開けない $! \n"; my @FILE = <FF>; close (FF); ####@読み込んだデータを$Dataに格納する foreach (@FILE) { $Data = $_; print "$Data<br>\n"; } } #フッタの表示 print "</body>\n"; print "</html>\n"; exit (); 対策や原因などを教えてくださるとありがたいです。よろしくお願いします。

  • Perlでの検索

    はじめまして。 Perlにて、テキストから "xxxx ∧ xxx ∨ xxx" という形の文字列を検索しようと思っており、 whileやifなどで while(またはif)($hoge =~ /xxxx ∧/g){... という検索をしても文字列一致しません。 どうやら∧や∨という記号の文字を認識していない ようなのですが、どのように解決すればよいのでしょうか? もしかしたらJ-Codeなどを使って、文字コードを 変えなければならなかったりするのでしょうか? お返事お待ちしております。よろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう