- ベストアンサー
C++を使ったXML変換プログラムの開発について
- 現在、WindowsXPとVC++2008を使用してXMLの変換プログラムを開発しています。日本語以外のOSやLinuxでも動作するようにするための具体的な対策について考え中です。
- テキストファイルを辞書として読み込むため、文字コードの変換に関する問題が気になっています。Shift-jisでUTF-8に変換する際、xercesの変換関数を使用していますが、他の環境ではどうすればいいかわかりません。
- WindowsやUnix系の関数の使いかたについても疑問があります。これらの関数の互換性や制約については、どのような情報源を参照すればいいのでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 要望として、日本語以外のOSやLINUX類でもできるだけそのまま動かせるよう留意してほしいと言われたのですが、具体的にどうやって気をつければよいのか思案中です。 どんなプログラムなのかにもよりますが、GUIやネットワーク周りは、OSごとに書き直すか、それなりのライブラリを使う必要があります。 CUIであれば、標準入出力の文字コードに気をつけるぐらいでしょうか? > LINUXにしたらeuc-jpだし、欧州だとまたちがうだろうから、どのように辞書を定義するのがよいのかわからなくて困っています。 これはOSの問題ではありませんね。 XMLがどんな文字コードになっているかは、OSとは関係なく決まりますので、Windowsであっても一通りに対応する必要があるかと思います。 > あと、いろいろ検索していると、windows系でしか働かない関数やunix系のものとかもいろいろあるのですね。これら、どの関数が使えてどれがこっちでは使えないですとかの情報はどうやったら手に入るのでしょう? 移植性に配慮するなら、原則は標準ライブラリだけを使うようにしてください。 標準ライブラリ以外を使う場合、処理系の独自拡張ではなく、Boost C++ Librariesやその他のマルチプラットフォームに対応したライブラリを使うことをお勧めします。
その他の回答 (1)
- jacta
- ベストアンサー率26% (845/3158)
> 入力・出力対象のXMLはUTF-8なんですが、変換のための辞書情報をもつテキストファイルもUTF-8にすると、当然ながら文字化けするので、当面sjisにしているんです。当たり前にに入力ストリームから読んでくれるのがsjisになっているのは Windowsだからかと思いまして。。 > ひょっとしてlocaleとか関係するでしょうか。今locale関連の文章を読んでるところです。 なるほど。localeでどうにかなる話ではありますが、対象とする処理系を限定しないと大変ですよ。 一応アドバイスしておくと、codecvtファセットを適切に定義すれば、どんな文字コードでも対応できるはずです。 > たとえばstat関数とかはOS依存なのか、とか調べる方法はありますか? statは処理系に依存します。 ドキュメントを読めば、準拠規格や移植性に関する情報が含まれている場合がありますので、それを参考にしてください。 最も確実な方法は、C++の規格書を見て、そこで規定されているかどうかを調べるのが一番確実です。 > 標準ライブラリとはstdですね。 厳密なことはともかく、おおむねその理解で大丈夫です。
お礼
再度の回答、ほんとうにありがとうございます! >対象とする処理系を限定しないと大変ですよ 下手にglobalでlocale指定しないほうがいいという意味でしょうか。 ソースも含めて全部UTF-8にしちゃおうかとか考えてますが、危険・・? >codecvtファセットを適切に定義すれば Boostにもありましたね。utf8_codecvt_facetというのが。 これを使うか、codecvtファセットを自分でなんとかするか、 ja_JP.UTF-8をロケール名に指定するか。でできるかと。 ただし最後のはうまくいったという情報は得られませんでした。 UTF-8で読めたとしても、辞書からロードした内容をxercesのオブジェクトにつっこむときにUTF-8が悪さする可能性があるので、明日手元に環境がそろったら、実験してみます。
お礼
ご回答ありがとうございます。 説明不足だったのに親切にいろいろ書いてくださって、感謝しています。標準ライブラリとはstdですね。(←多分) Boostというのはちらっとしかみたことないのですが、何ができるのか調べてみようと思います。
補足
>どんなプログラムなのかにもよりますが 失礼しました。完全にCUIです。ただし、標準入出力はデバッグ以外ではつかわず、ログファイルを残します。 入力・出力対象のXMLはUTF-8なんですが、変換のための辞書情報をもつテキストファイルもUTF-8にすると、当然ながら文字化けするので、当面sjisにしているんです。当たり前にに入力ストリームから読んでくれるのがsjisになっているのはWindowsだからかと思いまして。。 ひょっとしてlocaleとか関係するでしょうか。今locale関連の文章を読んでるところです。 >標準ライブラリ以外を使う場合 再質問になってすみませんが、たとえばstat関数とかはOS依存なのか、とか調べる方法はありますか?