現在WindowsXP,VC++2008,でXMLの変換プログラムを作っています。XMLのパーサはxerces3.0.1をビルドしました。
JAVAなら少々経験がありますが、C++は初めてです。
要望として、日本語以外のOSやLINUX類でもできるだけそのまま動かせるよう留意してほしいと言われたのですが、具体的にどうやって気をつければよいのか思案中です。
まず、テキストファイルを辞書として読み込むので、その文字コードとか問題になるのかなと思います。今はShift-jisで何の変換もなくUTF-8のXML変換ができていますが、xercesに変換関数があるからです(おそらく内部はUnicode)。LINUXにしたらeuc-jpだし、欧州だとまたちがうだろうから、どのように辞書を定義するのがよいのかわからなくて困っています。
文字コード変換ライブラリにICUというのがあるところまでは調べましたが、これをどう変換に活かせばos,言語環境に依存しにくいプログラムがつくれるのかよくわかりません。
あと、いろいろ検索していると、windows系でしか働かない関数やunix系のものとかもいろいろあるのですね。これら、どの関数が使えてどれがこっちでは使えないですとかの情報はどうやったら手に入るのでしょう?ひとつひとつの関数を検索するしかないでしょうか。
漠然とした疑問でほんとうに恐縮ですが、ご意見、参考サイトなどお持ちの方、どうぞ教えてください。
No.1ベストアンサー
- 回答日時:
> 要望として、日本語以外のOSやLINUX類でもできるだけそのまま動かせるよう留意してほしいと言われたのですが、具体的にどうやって気をつければよいのか思案中です。
どんなプログラムなのかにもよりますが、GUIやネットワーク周りは、OSごとに書き直すか、それなりのライブラリを使う必要があります。
CUIであれば、標準入出力の文字コードに気をつけるぐらいでしょうか?
> LINUXにしたらeuc-jpだし、欧州だとまたちがうだろうから、どのように辞書を定義するのがよいのかわからなくて困っています。
これはOSの問題ではありませんね。
XMLがどんな文字コードになっているかは、OSとは関係なく決まりますので、Windowsであっても一通りに対応する必要があるかと思います。
> あと、いろいろ検索していると、windows系でしか働かない関数やunix系のものとかもいろいろあるのですね。これら、どの関数が使えてどれがこっちでは使えないですとかの情報はどうやったら手に入るのでしょう?
移植性に配慮するなら、原則は標準ライブラリだけを使うようにしてください。
標準ライブラリ以外を使う場合、処理系の独自拡張ではなく、Boost C++ Librariesやその他のマルチプラットフォームに対応したライブラリを使うことをお勧めします。
この回答への補足
>どんなプログラムなのかにもよりますが
失礼しました。完全にCUIです。ただし、標準入出力はデバッグ以外ではつかわず、ログファイルを残します。
入力・出力対象のXMLはUTF-8なんですが、変換のための辞書情報をもつテキストファイルもUTF-8にすると、当然ながら文字化けするので、当面sjisにしているんです。当たり前にに入力ストリームから読んでくれるのがsjisになっているのはWindowsだからかと思いまして。。
ひょっとしてlocaleとか関係するでしょうか。今locale関連の文章を読んでるところです。
>標準ライブラリ以外を使う場合
再質問になってすみませんが、たとえばstat関数とかはOS依存なのか、とか調べる方法はありますか?
ご回答ありがとうございます。
説明不足だったのに親切にいろいろ書いてくださって、感謝しています。標準ライブラリとはstdですね。(←多分)
Boostというのはちらっとしかみたことないのですが、何ができるのか調べてみようと思います。
No.2
- 回答日時:
> 入力・出力対象の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が悪さする可能性があるので、明日手元に環境がそろったら、実験してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Ruby 英数字を含む文字列(0-9,A-Z)の桁数圧縮をするには 5 2022/06/28 18:15
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Word(ワード) MSオフィスのIMEは以前より文字変換能力が低下していませんか?(ATOKを買うべき?) 4 2023/08/03 09:15
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- 日本語 なぜ「壊石料理」と記述するのでしょうか? 26 2023/06/17 13:01
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- その他(Microsoft Office) Microsoft IME 一発で変換できない言葉がある 3 2022/07/19 19:29
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
Mac 乗数の入力方法
-
エクセルのvbaで検索ボタンを作る
-
Excel-VBAのmsgBox()の不思議
-
マンセル⇔XYZ,RGB変換式或いは...
-
C#で漢数字をアラビア数字に変...
-
家電製品の電力周波数を変える機械
-
VC++2005で、CString型に16進...
-
画像ファイルから.icoフォーマ...
-
VB.NETからJavaに変換するツー...
-
3のつく数字と3の倍数のみを表...
-
Excel2013のVBでFT245を制御したい
-
c++でmatからvectorへの変換の...
-
GetDlgItemInt( ) c++
-
C言語からC#への変換ツール
-
【EXCEL】カナ、ひらがなを英字...
-
PHPで、日本語からアルファベッ...
-
10進数をBCDに変換する方法
-
BCBプロジェクトをVCに移植
-
iconv_openで「II」(ギリシャ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
家電製品の電力周波数を変える機械
-
Mac 乗数の入力方法
-
10進数をBCDに変換する方法
-
bmp→jpgに、jpg→bmpに
-
なぜ通信には16進数文字列が使...
-
画像ファイル変換(Tiff→PDF)
-
シフトJISのCSVファイルをUFT-8...
-
分を時間に変換するプログラム
-
【EXCEL】カナ、ひらがなを英字...
-
C/C++→JAVAに変換するツール
-
c++でmatからvectorへの変換の...
-
UTF8→ShiftJISに変換したいです!
-
VB6からVB2010への変換について
-
C#でのpngからbmpへの変換について
-
StrConvの使い方について教えて...
-
PHPで、日本語からアルファベッ...
-
エクセルVBAの自動変換機能?
-
C++からCへのソース変換について
-
VB.NETをJavaに変換するツール...
おすすめ情報