- PR -

Xerces-c2.6でのXMLファイル読み込み時の文字化けについて

1
投稿者投稿内容
なべとし
会議室デビュー日: 2006/12/13
投稿数: 15
投稿日時: 2007-07-18 09:50
いつもお世話になっております。

現在、VC++2003 + MFC + Xerces-c2.6で、
XMLファイル中の任意のタグ(要素)のデータを抽出し、
それをエディットボックスに表示するというプログラムを作成しているのですが、
(以下、このプログラムをVC++プログラムとします。)
任意の文字において文字化けが発生するという状況が発生しています。

入力に使うXMLファイルは、テキスト(Shift_JIS+CrLf)を
Perl + Xerces2.3でXMLファイル化したもので、
(以下、このプログラムをPerlプログラムとします。)
文字・改行コードは、Shift_JIS+Lfです。


問題の詳細についてですが、
Perlプログラムでテキスト⇒XML化の際に、
「〜」、「−」(全角マイナス)がそれぞれ、
「〜」、「−」に変換された状態でXMLに出力されます。
これをそのままVC++プログラムに読み込ませるのですが、
うまく変換ができていないのか、「?」に化けてしまいます。


VC++プログラムでは、
=====
 char* buffer = xercesc:MLString::transcode(getNodeValue());
=====
で、データの取得を行っています。


対策として、以下の3つの方法を行いましたが、
全てにおいて文字化けor何らかの問題が発生しています。
=====
1.transcodeをICUにやらせる方法
 http://www.emaki.minidns.net/Programming/tools/icu/index.html
 ここを参考に、XercesにICUを組み込んだのですが、
 結果は変わらず、「?」に化けてしまいます。

2.transcoderクラスを使う方法
 http://www.ownway.info/XML/
 ここの「Xerces-C++で日本語を使うまで」を参考に
 transcoderクラスを使ってtranscodeを行おうとしたのですが、
 上記、文字化け対象文字列を含んでいると異常終了してしまいます。

3.その他
 2.のtranscoderクラスで、EncodingをUTF8とし、
 UTF8でデータを取得後、
 http://kamoland.com/wiki/wiki.cgi?ShiftJIS%a1%a4Unicode%28UTF%2d8%29
 ここを参考に、UTF8⇒Shift_JISの変換を行いましたが、
 今度は、「 」(半角スペース)に化けてしまいます。
=====


Perlプログラムは、都合上、ソースコードがいじれないので、
VC++プログラムで問題を解決する必要があります。


この辺りの問題に詳しい方がおられましたら、
情報提供の程、宜しくお願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)