掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
utf-8形式のXMLファイルをDOMにLoadするには? (ID:100175)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> DOMが、UTF-8形式のXMLファイルをVB6.0で使用されているUnicode(UTF-16)に > 自動的に変換しているのかという点です。 String 型に、生の UTF-8 のデータが渡される事はありません。 COM の世界においては、String 型は基本的に Unicode データとして 管理されますが、内部的には、これは UCS-2 (UTF-16) 相当のバイナリです。 つまり通常は、元ファイルの文字コードが何であるかを意識する必要は無く、 MSXML にロードされた XML データが、nodeValue プロパティ等を通じて 「String 型」で受け渡しされる際には、その内部データは、常に UTF-16 の Unicode データとなっている、という事です。 ただしこれは、MSXML の内部データが、常に UTF-16 固定であるという意味ではありません。 MSXML の load メソッドは、ファイル名やURLを表す「文字列(String または Byte配列)」だけではなく、 他にも XML データを持った「ストリーム(IStream, ISequentialStream, IPersistStream)」を渡す事が できるようになっています。(ASP の Request オブジェクトや、ADODB の Stream オブジェクトなど) MSXML がストリームから読み込みを行った場合には(または、ストリームが MSXML に保存した場合には)、 ストリーム自体が UTF-8 であった場合には、Call .Save("C:\sample.xml") の結果は、元ストリームと同じく UTF-8 形式の文字列で出力されます。(元が euc-jp なら、euc-jp のまま) そして、出力結果の文字コードを変えたい場合は、先に示した例のように、Save メソッドの引数を 「文字列」ではなく、「ストリーム」にしてやれば OK です。 > nodeValueなどにstringの文字列を直接代入するのはNGで、変換が必要かと思います。 上記のような理由から、そうした変換は不要です。 ただし、(文字コードではなく)文字集合の点から言えば、例えば Shift_JIS ファイルの場合、 http://support.microsoft.com/kb/170559/ja http://support.microsoft.com/kb/286776/ja のように、Unicode との間での変換上の問題が発生する可能性があります。 (UTF-8 の場合は、UTF-16 文字集合が同じであるため、そうした問題は発生しません。 ちなみに loadXML メソッドは、UTF-16 バイナリを持った String を受け取れますが データ中の <?xml version="1.0" encoding="〜"?> の encoding 指定を無視します。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.