Win32::NetAdminモジュールの中の UserGetAttributes関数に関する質問です。
WindowsNT 4.0, ActivePerl 623, Win32::NetAdmin (version = 0.07)
を使っています
NTサーバ上のユーザの属性を取りだすスクリプトの中で UserGetAttributes 関数を使ったところ,この関数の第7引数に格納される "説明"という項目に全角文字がふくまれている場合には,文字化けして(2バイトの文字が3バイトになって)とりだされてしまいます。半角文字はそのままとりだすようです。
私の環境が悪いのか,それともこういった仕様なのかが判断できずにいます。
同じ経験をされた方はいらっしゃらないでしょうか。
仮に仕様によるものだとすると,文字化けした戻り値をsjis等に変換するモジュールも存在しそうなものですが,実際どこかにあるのでしょうか。
No.1
- 回答日時:
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 なるものは,まだ手に入れておりません。準備でき次第テストしてみます。
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 …
この回答をみるまで,UTF8コードというものの存在を知りませんでした。
早速UTF8というキーワードをもとに検索しましたところ,
UTF8 -> SJIS変換をサポートしている Jcode.pm というものを見つけることができました。これにより,今回の問題はクリアできました。
Win32APIの利用の方は,少しがんばってみます。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Excel(エクセル) 全角文字「ヴ」の半角文字「ヴ」への変換方法について 3 2022/11/05 12:07
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- その他(プログラミング・Web制作) 文章中の数値を自動で足すサービスはあるでしょうか? 1 2022/10/16 08:10
- その他(ソフトウェア) ソースネクストアプリをインストールし、製品登録で半角英数字が入力できない 5 2022/07/03 22:44
- Java Java 南京錠 2 2023/02/04 11:46
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perl で 64ビットint を扱うには?
-
(秀丸)正規表現で、CSV内金額へ...
-
CGI.pm使用時の文字化けについて
-
LCD ディスプレイを Raspberry ...
-
ArduinoのジャイロモジュールMP...
-
Excel VBAでリンク切れをチェッ...
-
モジュールとクラスの違いって...
-
VBAでoutlook365が起動しません。
-
Excel VBAで、ユーザーフォー...
-
Wordで、分かち書きをするVBA ...
-
Excel VBA 定義されたプロージ...
-
Excelで時刻になったら知らせて...
-
powershellで関数名を変更する...
-
グラフのX,Y座標を取得したい
-
vba 標準モジュールインポート...
-
例外処理のフローチャートの記...
-
COBOLで、Shellを起動するには?
-
Perl+DBD::Oracleのエラーがわ...
-
VB.NETでの他アプリケーション...
-
VBAのモジュールについて教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XPathでのワイルドカード指定
-
perlのgrepで日本語の処理でエ...
-
perl で 64ビットint を扱うには?
-
漢字、カタカナ、ひらがな、英...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 定義されたプロージ...
-
例外処理のフローチャートの記...
-
ArduinoのジャイロモジュールMP...
-
ユーザー定義関数に#NAME?が返...
-
「デバイスは PRN を初期化でき...
-
VBAで別モジュールへの変数の受...
-
Excel VBA 『Call』で呼び出す...
-
エクセルVBAでシートモジュール...
-
LCD ディスプレイを Raspberry ...
-
モジュールとは何ですか
-
ハマったので助けて~。Apache...
-
VBA This Workbookモジュール...
-
VBでグローバル変数を宣言するには
-
グラフのX,Y座標を取得したい
-
モジュールの最大数はいくつな...
おすすめ情報