Win32::NetAdminモジュールの中の UserGetAttributes関数に関する質問です。

WindowsNT 4.0, ActivePerl 623, Win32::NetAdmin (version = 0.07)
を使っています
NTサーバ上のユーザの属性を取りだすスクリプトの中で UserGetAttributes 関数を使ったところ,この関数の第7引数に格納される "説明"という項目に全角文字がふくまれている場合には,文字化けして(2バイトの文字が3バイトになって)とりだされてしまいます。半角文字はそのままとりだすようです。

私の環境が悪いのか,それともこういった仕様なのかが判断できずにいます。
同じ経験をされた方はいらっしゃらないでしょうか。

仮に仕様によるものだとすると,文字化けした戻り値をsjis等に変換するモジュールも存在しそうなものですが,実際どこかにあるのでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

xE3 x81 x82 のコードを見てみた所、UTF8コードのようです


多分jperlやjcode.plではUTF8までは対応していないと思いますので
Win32APIのWideCharToMultiByte()とMultiByteToWideChar() APIを使って
SJIS<=>UTF8変換をする必要があると思います

多分ActivePerlであればWin32APIを呼び出す事が出来ると思いますのでその辺を参考にしてみてください

参考URL:http://www.microsoft.com/japan/developer/library …
    • good
    • 0
この回答へのお礼

この回答をみるまで,UTF8コードというものの存在を知りませんでした。
早速UTF8というキーワードをもとに検索しましたところ,
UTF8 -> SJIS変換をサポートしている Jcode.pm というものを見つけることができました。これにより,今回の問題はクリアできました。
Win32APIの利用の方は,少しがんばってみます。ありがとうございました。

お礼日時:2001/02/19 21:38

perlで日本語を扱う場合、SJISでは漢字の2バイト目が'\'の文字があり、これが原因で化けたりします


対処するにはJIS、またはEUCコードで漢字を扱う必要があります

漢字コードを変換するモジュールにjcode.plというものがあり、これを使う事で各コード変換をする事が出来ます
もしくはjperlを使えば漢字を正しく扱う事が出来るようです

この回答への補足

教えて頂きました jcode.pl なるものを早速準備して試してみました。

「あ」という文字を各コードに変換させたところ,
sjis : x82 xA0
jis : x1B x24 x42 x24 x22 x1B x28 x42
euc : xA4 xA2
となりました。いっぽう,例の関数では,「あ」は
xE3 x81 x82
という値になり,先の3つのコードとは一致しないみたいです。

jperl なるものは,まだ手に入れておりません。準備でき次第テストしてみます。

補足日時:2001/02/19 10:49
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

Q$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );がよく

$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );

というスクリプトがあったのですが、

$wfurikae = 1 の後に;もいれずifがきています。

違和感があります。

どのような意味になるのでしょうか。

宜しくお願い致します。

Aベストアンサー

そのまんまだと思いますよ。
if 以下の条件が真の時 $wfurikae = 1となります。
Perlはいろいろな書き方ができますので、こういう書き方もありです。
英語の文法の並びにする書き方です。

QActivePerlに含まれるモジュール

ActivePerlをインストールして
ムーバブルタイプを導入するつもりです。

ムーバブルタイプには色々モジュールのインストールについて
記載されていますが、
ActivePerlに最初から入ってるモジュールはどんなものが
あるのでしょうか?

もし可能なら一覧にしていただけませんでしょうか?
よろしくお願いします。

Aベストアンサー

http://oshiete1.goo.ne.jp/qa4101062.html
で書いた モジュール確認用(linux版)のスクリプトをwindowsに移植(って大げさな)してみました
結果:
--------------
O [ CGI.pm ] = C:/usr/lib/CGI.pm
--------------
X [ Image/Size.pm ] is Nothing
--------------
O [ File/Spec.pm ] = C:/usr/lib/File/Spec.pm
--------------
O [ CGI/Cookie.pm ] = C:/usr/lib/CGI/Cookie.pm
--------------
O [ DBI.pm ] = C:/usr/lib/DBI.pm
C:/usr/lib/Bundle/DBI.pm
C:/usr/lib/PerlEx/DBI.pm
--------------
X [ DBD/mysql.pm ] is Nothing
--------------
O [ HTML/Entities.pm ] = C:/usr/lib/HTML/Entities.pm
--------------
O [ LWP/UserAgent.pm ] = C:/usr/lib/LWP/UserAgent.pm
--------------
X [ SOAP/Lite.pm ] is Nothing
--------------
O [ File/Temp.pm ] = C:/usr/lib/File/Temp.pm
--------------
X [ Image/Magick.pm ] is Nothing
--------------
O [ Storable.pm ] = C:/usr/lib/Storable.pm
C:/usr/lib/DBI/Gofer/Serializer/Storable.pm
C:/usr/lib/Memoize/Storable.pm
--------------
X [ Crypt/DSA.pm ] is Nothing
--------------
O [ MIME/Base64.pm ] = C:/usr/lib/MIME/Base64.pm
--------------
X [ XML/Atom.pm ] is Nothing
--------------
O [ Archive/Tar.pm ] = C:/usr/lib/Archive/Tar.pm
--------------
O [ Archive/Zip.pm ] = C:/usr/lib/Archive/Zip.pm
--------------
O [ IO/Compress/Gzip.pm ] = C:/usr/lib/IO/Compress/Gzip.pm
--------------
O [ IO/Uncompress/Gunzip.pm ] = C:/usr/lib/IO/Uncompress/Gunzip.pm
##########以上です
恥ずかしいけど、スクリプトの中身も一応アップ
#!/usr/bin/perl
print"Content-type: text/html\n\n";
print "<html><pre>\n";
## 調べたいモジュールを@pm_test に入れる
# 例: @pm_test = ('Crypt::DSA','Image::Magick','uso::desu','file::Find');
@pm_test =
('CGI',
'Image::Size',
'File::Spec',
'CGI::Cookie',
'DBI',
'DBD::mysql',
'HTML::Entities',
'LWP::UserAgent',
'SOAP::Lite',
'File::Temp',
'Image::Magick',
'Storable',
'Crypt::DSA',
'MIME::Base64',
'XML::Atom',
'Archive::Tar',
'Archive::Zip',
'IO::Compress::Gzip',
'IO::Uncompress::Gunzip'
);
## windows版
$lib_path= join(" ", @INC);
$lib_path =~s/\//\\/g;
@pm_path = `dir $lib_path /b /s`;
#print join("<HR>\n",@pm_path); # 画面に全てのfileを表示するなら行頭の#外し
#__END__
foreach $pm_test(@pm_test)
{print"--------------\n";
$pm_test =~s/::/\//g;
$pm_test = $pm_test .'.pm';
foreach(@pm_path)
{s/\\/\//g;
if(/$pm_test/i)
{$yn{$pm_test} .=" $_";
}
}
if($yn{$pm_test}){print "O [ $pm_test ] = $yn{$pm_test}";}
else{print "X [ $pm_test ] is Nothing\n";}
}
__END__

http://oshiete1.goo.ne.jp/qa4101062.html
で書いた モジュール確認用(linux版)のスクリプトをwindowsに移植(って大げさな)してみました
結果:
--------------
O [ CGI.pm ] = C:/usr/lib/CGI.pm
--------------
X [ Image/Size.pm ] is Nothing
--------------
O [ File/Spec.pm ] = C:/usr/lib/File/Spec.pm
--------------
O [ CGI/Cookie.pm ] = C:/usr/lib/CGI/Cookie.pm
--------------
O [ DBI.pm ] = C:/usr/lib/DBI.pm
C:/usr/lib/Bundle/DBI.pm
C:/usr/lib/PerlEx/DBI.pm
...続きを読む

Qmain::getのモジュール?

Perl5.6(Win)を使っております。
Perlで過去にスクリプトを書いたのですが、

Undefined subroutine &main::get called at ./test.pl line 312.

とエラーが出たので、

use LWP::Simple;かなと思い。モジュールを追加したのですが
まだエラーが表示されます。

main::getと、名前空間まで同じになので、何か細工していたのかな
と思っていましたが、思い出せません。

他にどんなモジュールがあるのでしょうか?

また、現在インストールしているモジュールの一覧とかわかる方法はありますか?

Aベストアンサー

getと言えば、私もLWP::Simpleぐらいしか思い浮かびません。

>現在インストールしているモジュールの一覧とかわかる方法はありますか?
Perlクックブック第2版のサンプルに
pmdesc
という現在インストールされているモジュールを表示するスクリプトが載っていました。
http://www.oreilly.com/catalog/perlckbk2/
のexsampleのダウンロードのURLからダウンロードできます。
ch12
12-03.plx
がそうです。
そのまま、コードをここにアップするのは、どうかと思われますので、
ダウンロードして下さい。

参考URL:http://www.oreilly.com/catalog/perlckbk2/

QSys::Syslogモジュールでsyslogを出力したい

以下の様なスクリプトでsyslogを出力したいのですが、出力することができません。どなたかご教授ください。

環境は
vine2.6r4
perl5.6.1

で、/etc/syslog.confにlocal4.* /var/log/hoge.logを追加後、syslogdを再起動しました。
プログラムを実行するとhoge.logファイルは出力されます。
また、logger -p local4.err messageでhoge.logにmessageが出力されることも確認済みです。


-------------
#!/usr/bin/perl -w
use strict;
use Sys::Syslog qw(:DEFAULT setlogsock);

# 実行ファイル名の取得
my ($prog_name) = $0;
$prog_name =~ s/(.*)\/(.*)/$2/;

# Sys::Syslogモジュールの引数
my($ident, $logopt, $facility);
my($ident) = $prog_name;
my($logopt) = 'ndelay';
my($facility) = 'local4';

# 処理開始
&put_syslog("info", "process start.");

sub put_syslog {
my($priority, $msg) = @_;
openlog($ident, $logopt, $facility) || die "put_syslog: can't open syslog\n";
syslog($priority, $msg);
closelog();
}

以下の様なスクリプトでsyslogを出力したいのですが、出力することができません。どなたかご教授ください。

環境は
vine2.6r4
perl5.6.1

で、/etc/syslog.confにlocal4.* /var/log/hoge.logを追加後、syslogdを再起動しました。
プログラムを実行するとhoge.logファイルは出力されます。
また、logger -p local4.err messageでhoge.logにmessageが出力されることも確認済みです。


-------------
#!/usr/bin/perl -w
use strict;
use Sys::Syslog qw(:DEFAULT setlogsock);

# 実行ファイル名...続きを読む

Aベストアンサー

setlogsock( 'unix' );
openlog($ident, $logopt, $facility);

――のように、openlogする前に、UNIX domainで通信するように設定してみては。

QDBI DBD::Pg 等のPerlモジュール・ドライバのインストールについて

はじめまして。

Perlが稼動するWebサーバーと
Postgreが稼動するDBサーバーと物理的に2台に分けた
サーバー環境上での質問です。

DBI
DBD::Pg
Net::SMTP

という3つをインストールしようと思うのですが、
どれをどちら(WebかDBか)のサーバーに
入れてよいのか判別がつきません。
(今まで1つのサーバー上で稼動させていた事がありますが)

理屈で考えれば、Perl上で動かすものだから
すべてWebサーバーにインストールすればいいような気がする
のですが・・・。

どなたかご存知の方、ぜひ教えてください。

Aベストアンサー

DBD/DBIパッケージは、クライアント(この場合はWebサーバー)からデータベースサーバーにアクセスするためのツールなのでクライアント側にインストールします。


このカテゴリの人気Q&Aランキング

おすすめ情報