• 締切済み

XMLの表示文字化け

 皆様  XMLをブラウザで表示させたときの文字化けで困っています。  もうちょっと詳細な話をしますと、あるアプリケーションの初期設定ファイル(以下、INI.XML)の挙動がおかしく、動作が不安定な状態になっております。  なお、このアプリケーションは.NETをプラットフォームにしています。  動作環境は、WindowsVista Business SP2(32bit)です。  INI.XML(文字コードはUTF-8)をメモ帳で開いた内容は、 ------------------------------------------------- <?xml version="1.0"?> <MyConfig> <Server> <Connect>Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=C:\広島\Abc.MDB</Connect> </Server> </MyConfig> ------------------------------------------------- こんな具合です。  このINI.XMLを、例えばc:\tmpというフォルダに入れ、ダブルクリックするとブラウザ(IE)でXMLの内容がずらっと表示されますが、表示内容はメモ帳の内容とほぼ同一です。  違いといえば、 ・\がバックスラッシュになる ・タグ等に色がつく といった程度です。  次に、このINI.XMLを件のアプリケーションが入っているフォルダ(例:C:\Program Files\システム)に入れて、ダブルクリックしてブラウザで表示させると、XMLソース中の「広島」が「三次」に化けてしまいます。  ブラウザ上の「C:\広島\Abc.MDB」部分(\は実際はバックスラッシュ)をコピーしてメモ帳に貼り付けると、「C:\三次\Abc.MDB」という文字列が入力されます。  しかし、ブラウザからソースを表示させると、正しく「広島」となっています。  面白いことに、INI.XMLをINI-.XMLという名前に変更してブラウザで表示させると、「広島」は「広島」のままです。  ブラウザのキャッシュをクリアしてみたりもしましたが、状況に変化はありません。レジストリで「三次」を検索しましたが、ヒットしません。  このアプリケーションがINI.XMLをそのままテキストで読み込めば問題ないのでしょうが、なぜかブラウザ表示内容で読み込むみたいで、化けた「三次」を読み込んでしまいます。  見てのとおりXMLの内容はデータベースへの接続文字列ですので、アプリケーションは見当違いのところへ接続しようとして、まともに動作しません。  アプリケーションを再インストールしても状況は同じです。  しかし、WindowsXP上では、この問題は発生しません。  何が問題なのでしょうか。よろしくご指導ください。

みんなの回答

  • localica
  • ベストアンサー率52% (202/385)
回答No.4

>この部分にエンコード情報を書き加えたりしましたが、状況は同じです。 ですから、エンコードを書き換えるだけでなく、文字コードセットも合わせる必要があるということです。 例えば、以下の文字列をWindowsのメモ帳にて文字コードANSIで保存します。 this app can break そうすると、Unicodeに解釈(変換?)して保存され文字化けします。(BOMが付加される) ※環境:WindowsXP、メモ帳にて検証 理由はアプリケーションによってBOMの対応が必ずしも一律でないからです。 ですから、アプリケーションによる文字コード対応をきちんと整理する必要があるということです。 http://support.microsoft.com/kb/837192/ja

t-hiroshim
質問者

補足

 WindowsXP上のメモ帳で、「this app can break」という文字列を入力し、これを文字コードANSIで「test.txt」というファイル名で保存しました。  この「test.txt」をWindowsXP上のメモ帳で開いても、WindowsVista上のメモ帳で開いても、文字化けしません。  さすがに、MIFES8でUTF-16とUTF-32で開くと化けましたが。  文字コードの問題ではないと思うのですが。  ファイル名を変更する(つまり中身もそのまま)と化けなかったり、ファイル名はそのまま(つまり中身もそのまま)で別のフォルダ上で開くと化けなかったりするのです。  WindowsVistaでは、「フォルダによって標準の文字コードが違う」なんて事があるのでしょうか。それも、漢字二文字だけ。  今、別パターンを試してみました。 Data Source=C:\広島\Abc.MDB 部分を、 Data Source=C:\○○テスト\Abc.MDB としてみたのです。(○○は任意の漢字二文字)  アプリケーションが入っているフォルダ上では、かたくなに○○だけが「三次」に化けます。  このアプリケーションは、三次市で誕生したのか?

  • localica
  • ベストアンサー率52% (202/385)
回答No.3

>エンコードに問題があるとしても・・・、ファイル名を変更するだけで表示状況が変化するという理由を説明できないのではないでしょうか。 唐突な質問という感じもあるのですが、まあ、同根と思いますので。 ファイル名を変更というよりは「ファイルを保存する」と表示状況が変化するのではありませんか? #変更することによって保存を行っているから ブラウザで表示する場合はあくまでエンコーディングの出力結果をブラウザで表示しているだけ。 ファイルとして保存すると、アプリケーションによって解釈された文字コードで保存されます。 つまり、元ファイル・ブラウザ表示・出力ファイルは等価ではない。 普通のWebアプリケーションでブラウザ表示するだけならそれほど気にしなくても済むけど、文書として書き出す場合はきちんと意識しなければなりません。 http://www.atmarkit.co.jp/fxml/askxmlexpert/016unicode/16unicode.html

t-hiroshim
質問者

補足

 ファイル名の変更は、件のアプリケーション上で行っているのではなく、エクスプローラで行っています。  INI.XMLでは「広島」が「三次」に化け、(エクスプローラ上で)INI-.XMLにすると「広島」は「広島」のままで、再度(INI-.XML)からINI.XMLに変更すると「広島」が「三次」に化けます。  悲しいくらいに、面白いでしょう? >つまり、元ファイル・ブラウザ表示・出力ファイルは等価ではない  そうなんですよ。元ファイルをそのまま読んでくれるのならば、何の問題もないのです。 ><?xml version="1.0"?>  この部分にエンコード情報を書き加えたりしましたが、状況は同じです。

  • localica
  • ベストアンサー率52% (202/385)
回答No.2

「XMLページを表示できません」「テキストの内容に無効な文字が見つかりました。」 色々な理由があるのですが、エンコーディングがUTF-8なのにS-JISで書かれているそのようになるケースもあったと思います。 BOMをつけても実際の文字コードが違うと推測します。 http://ja.wikipedia.org/wiki/UTF-8 XSLがちゃんとUTFで書かれているのXMLをSJISにしたり、混在していませんか?

t-hiroshim
質問者

補足

 エンコードは、間違いなくUTF-8です。  エンコードに問題があるとしても・・・、ファイル名を変更するだけで表示状況が変化するという理由を説明できないのではないでしょうか。

  • localica
  • ベストアンサー率52% (202/385)
回答No.1

メモ帳で読めるということはファイルがSJISで書かれているということ。 ※メモ帳はUTF-8が扱えない UTF-8にエンコーディングするならファイルもUTF-8で書くほうが望ましいでしょう。 そもそもエンコーディングの記述もないように見えます。

t-hiroshim
質問者

補足

 回答ありがとうございます。  INI.XMLはBOM付きUTF-8で記述しております。MIFES8他数種類のエディタで確認しました。  そのINI.XMLを、MIFES8を使ってSHIFT-JISエンコードで保存し、ブラウザで表示させようとすると、「XMLページを表示できません」「テキストの内容に無効な文字が見つかりました。」という表記が出ます。