こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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上では、この問題は発生しません。

 何が問題なのでしょうか。よろしくご指導ください。

投稿日時 - 2010-01-21 10:15:32

QNo.5610307

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

>この部分にエンコード情報を書き加えたりしましたが、状況は同じです。

ですから、エンコードを書き換えるだけでなく、文字コードセットも合わせる必要があるということです。

例えば、以下の文字列をWindowsのメモ帳にて文字コードANSIで保存します。
this app can break

そうすると、Unicodeに解釈(変換?)して保存され文字化けします。(BOMが付加される)
※環境:WindowsXP、メモ帳にて検証
理由はアプリケーションによってBOMの対応が必ずしも一律でないからです。

ですから、アプリケーションによる文字コード対応をきちんと整理する必要があるということです。
http://support.microsoft.com/kb/837192/ja

投稿日時 - 2010-01-26 11:08:29

補足

 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
としてみたのです。(○○は任意の漢字二文字)
 アプリケーションが入っているフォルダ上では、かたくなに○○だけが「三次」に化けます。

 このアプリケーションは、三次市で誕生したのか?

投稿日時 - 2010-01-27 15:14:59

ANo.3

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

唐突な質問という感じもあるのですが、まあ、同根と思いますので。


ファイル名を変更というよりは「ファイルを保存する」と表示状況が変化するのではありませんか?
#変更することによって保存を行っているから

ブラウザで表示する場合はあくまでエンコーディングの出力結果をブラウザで表示しているだけ。
ファイルとして保存すると、アプリケーションによって解釈された文字コードで保存されます。

つまり、元ファイル・ブラウザ表示・出力ファイルは等価ではない。
普通のWebアプリケーションでブラウザ表示するだけならそれほど気にしなくても済むけど、文書として書き出す場合はきちんと意識しなければなりません。

http://www.atmarkit.co.jp/fxml/askxmlexpert/016unicode/16unicode.html

投稿日時 - 2010-01-25 12:35:46

補足

 ファイル名の変更は、件のアプリケーション上で行っているのではなく、エクスプローラで行っています。
 INI.XMLでは「広島」が「三次」に化け、(エクスプローラ上で)INI-.XMLにすると「広島」は「広島」のままで、再度(INI-.XML)からINI.XMLに変更すると「広島」が「三次」に化けます。
 悲しいくらいに、面白いでしょう?

>つまり、元ファイル・ブラウザ表示・出力ファイルは等価ではない
 そうなんですよ。元ファイルをそのまま読んでくれるのならば、何の問題もないのです。
><?xml version="1.0"?>
 この部分にエンコード情報を書き加えたりしましたが、状況は同じです。

投稿日時 - 2010-01-25 13:25:28

ANo.2

「XMLページを表示できません」「テキストの内容に無効な文字が見つかりました。」

色々な理由があるのですが、エンコーディングがUTF-8なのにS-JISで書かれているそのようになるケースもあったと思います。

BOMをつけても実際の文字コードが違うと推測します。
http://ja.wikipedia.org/wiki/UTF-8

XSLがちゃんとUTFで書かれているのXMLをSJISにしたり、混在していませんか?

投稿日時 - 2010-01-21 14:18:50

補足

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

投稿日時 - 2010-01-21 16:06:53

ANo.1

メモ帳で読めるということはファイルがSJISで書かれているということ。
※メモ帳はUTF-8が扱えない

UTF-8にエンコーディングするならファイルもUTF-8で書くほうが望ましいでしょう。
そもそもエンコーディングの記述もないように見えます。

投稿日時 - 2010-01-21 11:23:23

補足

 回答ありがとうございます。
 INI.XMLはBOM付きUTF-8で記述しております。MIFES8他数種類のエディタで確認しました。

 そのINI.XMLを、MIFES8を使ってSHIFT-JISエンコードで保存し、ブラウザで表示させようとすると、「XMLページを表示できません」「テキストの内容に無効な文字が見つかりました。」という表記が出ます。

投稿日時 - 2010-01-21 13:08:16

あなたにオススメの質問