そこはかと

日々、見たもの、触ったもの、思った事をそこはかと書いていきます。

GLPIとOCS Inventory NG連携時の文字化け超暫定策

GLPIとOCS Inventory NGの連携が便利な事は分ったけれど、OCS Agentが登録したクライアント情報の日本語が化ける問題があった。

ocsinventory.exe /local /xml を実行してみたら、出力されるXMLファイルの文字コードはSJISで、XML内のencodingはISO-8859-1だった。

文字コードもencodingもUTF-8にして保存したファイルをLocal importすると、OCS Inventory NGでは文字化けするものの、GLPIでは問題なし!因みに、encodingをShift_JIS(文字コードはsjisのまま)にしてLocal importしたらInternal Server Errorを返された。

超暫定策としては

  1. ocsinventory.exeでxmlファイルを取得
  2. 文字コードとencodingをUTF-8に修正
  3. 拡張子をocsに変更

したファイルをLocal importすれば(GLPIでは)化けない。

暫定策としては、サーバー側のOcsinventory.pmでXML展開している辺りを修正すればいけるかもしれない。

…と思ったら、既に議論されてた(^^;

2008 10月 2 - 投稿者: シツメイシ | Linux | | 6件のコメント

6件のコメント »

  1. GLPI と OCS Inventory NG を使いはじめて、文字化けについて調べているうちにここに来ました。

    OCS Inventory NG_1.02RC3(UNIX)を動かしていますが、Ocsinventory.pmを修正しても改善せず、超暫定対策をしようとしましたが、xmlファイルの拡張子をocsに変更してもインポートできませんでした。Agentがlocalで吐き出すocsファイルはバイナリ(圧縮?)ファイル?で、Serverでそのファイルはインポートできますが、xmlテキストファイルの拡張子をocsに変えたファイルではerrorとなります。

    あとGLPIでOCSのソフトウェアの情報が連携できない(OCSのバージョンによる?)のもみなさんどうしてるんでしょう???

    コメント : むーとん | 2008 11月 21 | 返信

  2. コメントありがとうございます。

    はて?xmlファイルの拡張子をocsに変えるだけでインポートしてくれた気が…
    バージョンは1.02RC2です。
    1.02RC3でも確認しましたがインポートしてくれました。

    ocsinventory.exe /local /xml
    で、同一ディレクトリに出来る
    PCName-2008-10-01-18-39-52.ocs
    PCName-2008-10-01-18-39-52.xml
    の内、.ocsを削除

    .xmlをテキストエディタで開き
    encoding=”ISO-8859-1″

    encoding=”UTF-8″
    に修正し、文字コードをUTF-8で保存。

    拡張子を.xmlから.ocsへ変更。

    OCS InventoryのLocal importで.ocsを選択。

    コメント : シツメイシ | 2008 11月 27 | 返信

  3. 因みに、OCS Inventoryが収集したソフトウェア情報をGLPIにインポートするには

    セットアップ > 一般設定 > 制限 > OCSNGモード
    OCSNGモードを有効にする “いいえ”→”はい”

    セットアップ > OCSNGモード
    ソフトウェア “インポート無し”→”ユニットインポート”
    OCSのソフトウェア辞書を使います “はい”→”いいえ”

    で読んでくれると思います。

    コメント : シツメイシ | 2008 11月 27 | 返信

  4. コメントして頂き、ありがとうございます。
    私の環境では、
     元々生成される.ocsファイル:約 6Kバイト
            .xmlファイル:約60Kバイト
    で、前回.ocsファイルはインポートできて、xml拡張子変更.ocsファイルはできな
    かったので、特別なファイルフォーマットでないとダメかとあきらめていました。
    ただ、改めて今回してみると、なんと読んでくれました!!(その前に、データ
    ベースを再作成したり、OCSの configをいじったりはしました)。
     OCS Inventoryでその情報を見ると、ハードウェア情報は日本語になっていまし
    たが、ソフトウェア情報は文字化けでした。ただ、Dictionaryのところでカテゴリを”NEW”以外に変更(GLPIにソフトウェア情報をインポートするのにカテゴリ変更
    が必要とどこかに書いてあったので)するところでは、日本語になっていました。

     OCS Inventoryで文字化けしていても、GLPIで問題無ければOKということで、
    期待してGLPIでインポートしたところ、なんとOCS Inventoryで大丈夫だったとこ
    ろも含めて日本語は全部文字化けでした(ソフトウェアも文字化けで何がなんだか
    分からないですがインポートできました)。ここで文字化けするとは思っていな
    かったので、かなりショックです。Mysqlの設定や、そのインターフェース部分に
    問題あるのでしょうか?もうしばらく文字化け問題とつきあってみます。

    コメント : むーとん | 2008 11月 28 | 返信

  5.  文字化けの件、かなり強引ですが解決しました。
    php,mysqlそれぞれ自動変換機能が文字化けの原因との情報が
    多数あり、それぞれ設定ファイル(php.ini,my.conf)を修正
    しましたが、解決出来ませんでした。mysqlのデータを見ると、
    OCS inventoryではUTF-8で保存されているようですが、GLPIで
    インポートしたあとのデータが文字化けしていました。

     なのでGLPI→mysqlのインポート部分に原因があると思い、
    mysqlに接続している部分、

    /glpi/inc/dbmysql.class.php
    $this->dbh = @mysql_connect($this->dbhost, $this->dbuser,
           rawurldecode($this->dbpassword)) or $this->error = 1;
    if ($this->dbh){
    //@mysql_query(“SET NAMES ‘” . (isset($this->dbenc) ?
    $this->dbenc : “utf8″) . “‘”,$this->dbh);
    $select= mysql_select_db($this->dbdefault) or $this->error = 1;

     を見つけ、どこかで「SET NAMES」は使うなと書いてあったので、上記の
    通り「@mysql_query(“SET NAMES ‘”・・・」の行をコメントアウトしたとこ
    ろ、文字化けが無くなりました(php.ini,my.confの変更の影響もあるかも
    しれません)。恒久的にこれで良いのかは分かりませんが・・・。

     シツメイシさんには、ブログに質問してしまって、ご迷惑おかけしました。
    localファイルが読めなかった時点で9割あきらめてしまって、愚痴っぽく
    コメントをあげてしまいましたが、シツメイシさんの環境ではできている
    とのコメントをもらい、再チャレンジの意欲が湧き、解決?できました。
    OCS Inventory,GLPIの日本語情報が少ない中で、とても心強かったです。
    ありがとうございました。

    コメント : むーとん | 2008 11月 30 | 返信

  6. 私のサイトにも記載している(http://www.hanzou.jp/weblog/?p=649)のですが、
    utf8ではなく、UTF-8のようです。

    むーとんさんの5のコメントアウトの件も、utf8ではなく、UTF-8に直す事でいけます。

    ※正しい解決方法かは分かりません(´・ω・`)

    コメント : はんぞー | 2009 8月 15 | 返信


コメントをどうぞ