UserGetAttributesの第7引数が文字化けするのですが

このQ&Aのポイント
  • WindowsNT 4.0, ActivePerl 623, Win32::NetAdminを使っています。
  • NTサーバ上のユーザの属性を取りだすスクリプトの中で UserGetAttributes 関数を使ったところ、文字化けが発生します。
  • 文字化けした戻り値をsjis等に変換できるモジュールについて知りたいです。
回答を見る
  • ベストアンサー

UserGetAttributesの第7引数が文字化けするのですが

Win32::NetAdminモジュールの中の UserGetAttributes関数に関する質問です。 WindowsNT 4.0, ActivePerl 623, Win32::NetAdmin (version = 0.07) を使っています NTサーバ上のユーザの属性を取りだすスクリプトの中で UserGetAttributes 関数を使ったところ,この関数の第7引数に格納される "説明"という項目に全角文字がふくまれている場合には,文字化けして(2バイトの文字が3バイトになって)とりだされてしまいます。半角文字はそのままとりだすようです。 私の環境が悪いのか,それともこういった仕様なのかが判断できずにいます。 同じ経験をされた方はいらっしゃらないでしょうか。 仮に仕様によるものだとすると,文字化けした戻り値をsjis等に変換するモジュールも存在しそうなものですが,実際どこかにあるのでしょうか。

  • Perl
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • alfeim
  • ベストアンサー率58% (114/195)
回答No.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/default.asp?URL=/japan/developer/library/jpwinpf/_win32_widechartomulti
moon_poco
質問者

お礼

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

その他の回答 (1)

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.1

perlで日本語を扱う場合、SJISでは漢字の2バイト目が'\'の文字があり、これが原因で化けたりします 対処するにはJIS、またはEUCコードで漢字を扱う必要があります 漢字コードを変換するモジュールにjcode.plというものがあり、これを使う事で各コード変換をする事が出来ます もしくはjperlを使えば漢字を正しく扱う事が出来るようです

moon_poco
質問者

補足

教えて頂きました jcode.pl なるものを早速準備して試してみました。 「あ」という文字を各コードに変換させたところ, sjis : x82 xA0 jis : x1B x24 x42 x24 x22 x1B x28 x42 euc : xA4 xA2 となりました。いっぽう,例の関数では,「あ」は xE3 x81 x82 という値になり,先の3つのコードとは一致しないみたいです。 jperl なるものは,まだ手に入れておりません。準備でき次第テストしてみます。

関連するQ&A

  • JNIを使った、全角半角が混在した文字列の引数、戻り値の受け渡し

    JNIを使用して、JavaからExcelを操作しようと考えております。 ワークブックを開くDLL関数を用意し、 その際に、引数としてファイルのフルパスを、戻り値として開かれたブックの名称を返すようにしたのですが、 半角英数の文字は正しく帰ってくるのですが、全角のファイル、及びフォルダを引数に指定した場合、 文字化けが発生し、ブックを開けず、困っております。 JNIを使った全角半角が混在した引数、戻り値の関数の受け渡しを行なうにはどのようにすればよいのでしょうか。 ご回答をよろしくお願いいたします。

  • SJIS→EUCに送っても文字化けしない

    htmlは、SJISで作っています。 PHPは、EUCで作っています。 普通は文字化けをするため、mb_convert_encoding関数を用いますが、 なぜか、この関数を使わなくても、文字化けしません。 友人は、有り得ないと言います。 事実、友人PCではmb_convert_encoding関数で文字化けを直してました。 私も友人に同感で、SJIS→SJISやEUC→EUCなら文字化けしないけど、文字コードが違うのです。違うから、mb_convert_encoding関数を使うと、思っているのですが‥‥ 設定が違うのかと思い、友人の、php.iniなどいくつかのファイルを私のPCに上書きしてもらいましたが、変わりませんでした。 こういうことってあるのでしょうか? 文字化けしないなら、mb_convert_encoding関数を使わなくて良いので、楽だと思いましたが・・・ 何かの不具合なら、いざ完成した時、またmb_convert_encoding関数をいれる手間がありますし、どうしようか迷っています。 本には、「文字化けしない場合もある」という記述は一言も書いてありませんでした。 逆に、「文字化けするからmb_convert_encoding関数を用いる」と大きく書いてあるぐらいです。 何かの設定なのでしょうか? ソフトのバージョンも、同じでした。不思議です。

    • ベストアンサー
    • PHP
  • MySQL5.1の文字化け

    多くの方が同様の質問をされていたのですが、一致する問題が見つけれなかったので、ご存じの方がおられたら教えて下さいm(_ _)m (環境)  PHP 5.2.8 ZendFramework 1.5.1 から Pdo Mysqlを使用  文字コード:SJIS  Mysql 5.1  文字コード:EUC-JP (質問内容) 携帯の絵文字データをSJISのバイナリでスクリプト中に埋め込むため、スクリプトの文字コードをSJISに統一したところ、文字化けが発生しました。 SET NAMES SJIS のSQLを発行することで表示は正しくできるようなったのですが、新たにレコードを追加しようとすると文字化けが発生します。 例)情報 → 情表 insertを行う前の文字コードをSJIS,SJIS-win,EUCと変えてみましたが、SJISもしくはSJIS-winの場合は上記の例のとおりとなり、EUCにすると完全な文字化けとなりました... おそらく登録時にMYSQLがSJIS→UTF8→EUCに変換される時に正しく変換されていないものと思われるのですが、どなたか対処方法をご存じないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字化け中。

    mysqlで文字化けします。「十勝平野」や「ソース」が化けます。 webでいろいろと調べてmy.iniをいじくってみましたが、まだ文字化けがなおりません。 mysql> statusは -------------------------------------- Connection id: 7 Current database: Current user: root@localhost SSL: Not in use Server version: 4.0.26-nt Protocol version: 10 Connection: localhost via TCP/IP Server characterset: latin1 Client characterset: sjis TCP port: 3306 ----------------------------------- このような状態です。 my.iniファイルはC:/windowsフォルダの中に置いています。 一部のサイトでは「Windowsでは、インストールディレクトリ等に用意します。」という表現が使われていたのですが、C:/windowsフォルダのことではないのでしょうか? -----------------my.ini--------------------- [mysqld] default-character-set=sjis basedir=C:/server/mysql datadir=C:/server/mysql/data [WinMySQLadmin] Server=C:/server/mysql/bin/mysqld-nt.exe default-character-set=sjis [mysql] default-character-set=sjis [mysqldump] default-character-set=sjis [client] default-character-set=sjis ------------------------------------------ どなたか、よろしくお願いします。m(_ _)m

  • SYSログ出力時の文字化けについて

    おせわになります。 Sys::Syslogモジュールを使用してSYSログを出力したのですが、 ある一定の文字だけが文字化けしてしまいます。 どなたか、このような事象をご存じないでしょうか? また、解決方法をご存知でしたらご教授ねがいます。 (全て英字で出力する、文字化けしない文字を使用する以外で) ・作成したプログラムは文字コードEUCで作成しております。 ・ダブルバイトでの一部の文字が文字化けします。   例)ファイル⇒ファイボ353 OS:Solaris Perl:ActivePerl5.6.1

    • ベストアンサー
    • Perl
  • UTC-8→SJISで文字化け

    こんにちわ!宜しくお願い致します。 現在、オープンソースのアンケートシステム「limesurvey」におきまして、文字化けが起きており困っております。 LimeSurveyバージョン 1.90+ Build 9046 ほとんどのところは、きちんと日本語表示されるのですが、グラフ内(pchart)の文字が文字化けします。 いろいろネットで調べて、imagettftextが原因と分かりました。 「JIS-mapped Japanese Font Support」の設定値がTRUEの場合、GDライブラリは渡された文字列をUTF-8ではなく、Shift_JISとして解釈するということが分かり、mb_convert_encoding関数であらかじめShift_JISに文字コード変換してから、imagettftext関数に渡したところ基本的には、文字化けが解消しました。 以下が、そのコードです。 $Value2 = mb_convert_encoding($Value2,"SJIS ","UTF-8"); しかしながら、「(1)(2)(3)」(←まる1、まる2、まる3)などの機種依存文字がどうしても「?」に変換されてしまいます。 Shift_JISには、「(1)(2)(3)」などの機種依存文字が無いので仕方がないのですが、何とか良い方法が無いでしょうか? ちなみにネットで調べたところ、「SJIS」ではなくて、「SJIS-win」で変換すれば文字化けが起こらないと分かりましたが、今度は、imagettftextでエラーが出てしまいます。 下記のコードはエラーになります。 $Value2 = mb_convert_encoding($Value2,"SJIS-win ","UTF-8"); 「JIS-mapped Japanese Font Support」の設定値がTRUEの場合でも、GDライブラリは渡された文字列をUTF-8として強制的に解釈させる方法など無いのでしょうか?その他何か良い方法があればお教え下さい。 以上、宜しくお願い致します。

    • 締切済み
    • PHP
  • MySQLでの文字化けについて

    すいません、教えてください。 PHP(PHP-5.2.4)でCSVファイル を読み込んでMySQL(4.1.22)に INSERTしているのですが文字化けします。 SJIS→utf8_general_ciです。 いろいろ調べて ~ $wk[$i] =mb_convert_encoding($csvfile[$i],'UTF-8','SJIS-win'); ~ とかやってみたのですがうまくいきません。 どなたかよろしくお願いします。

    • 締切済み
    • PHP
  • 文字化け

    以前、私の質問に対する回答のなかで「&shy;」と文字化けしていたものがありました。また、別のかたの回答のなかで「&#22099;」というものがありました(&#;は本来は半角です)。この文字化けは単にブラウザの問題なのでしょうか、それともOKWaveの仕様と関係があるのでしょうか。もしOKWaveの仕様と関係があるのなら、ほかにどのような文字化けが発生するのでしょうか。 ちなみに、私のブラウザはLinuxのFirefoxです。

  • word文書が文字化けします

    自宅word2002(win-me)で作成したものを職場word98(win-NT4.0)で開くと文字化けしました。どうしたらよいでしょうか。

  • sambaの共有名が文字化け

    Linuxのsambaサーバにwindowsクライアントからアクセスすると共有フォルダ名が文字化けする場合があります。クライアントのOSにより発生する場合としない場合とがあります。 ・Windows95,98:文字化けしない ・WindowsNT,2000:文字化けする サーバは、TurboLinuxServer6.0で、samba2.0.7-ja-2.2を使用しています。 smb.confはSJISで記述し(ているつもり)、coding system=SJIS,client code page=932としています。 samba2.0.5の時は問題なかったのですが... そもそも、サーバ側の設定の問題なのか、クライアント側の設定の問題なのかさえわかりません。 解決方法をご存じの方がいらっしゃいましたら、よろしくお願いします。