2005年12月10日
川俣晶の縁側ソフトウェア技術雑記total 5599 count

XMLもダメなのか! responseTextだけではなかった、OperaのXMLHttpRequestオブジェクトの文字化け問題

Written By: 川俣 晶連絡先

 まさか解決策不在なのか? OperaのXMLHttpRequestオブジェクトのresponseTextが文字化けする問題の更なる深みの続きです。

 OperaでのresponseTextの利用はリスキーでありすぎることが分かったので、responseXMLを試したところ、これも同じ問題が存在することが分かりました。

現象 §

 Operaの「表示」→「エンコード」メニューの選択によってXMLHttpRequestオブジェクトでXML文書を正しく読み込めない。

環境 §

Windows XP SP2 + Opera 8.5 日本語版

再現手順 §

  • Operaのメニューから「表示」→「エンコード」→「日本語」→「自動判定」と選びます
  • 下記のHTMLファイルをローカルHDDより開きます
  • "UTF-8で読み込む"ボタンをクリックし、文字化けせずに表示されることを確認します
  • "UTF-16で読み込む"ボタンをクリックし、文字化けせずに表示されることを確認します
  • Operaのメニューから「表示」→「エンコード」→「日本語」→「Shift-JIS」と選びます
  • "UTF-8で読み込む"ボタンをクリックすると、以下の「結果1」の内容が表示されます
  • "UTF-16で読み込む"ボタンをクリックすると、以下の「結果2」の内容が表示されます

結果1 §

例外発生: <?xml version="1.0" encoding="UTF-8"?>

<root>縲御サ頑律縺ョ蜻ウ蝎梧ア√�蜈キ縺ッ菴輔□縺�縲�

縲後�縲�

縲後↑繧薙→縲ゆサ頑律縺オ縺ョ蜻ウ蝎梧ア�縺阪g縺��縺ョ縺ソ縺昴@繧�縺�縲�/root>

結果2 §

例外発生: ��<

考察 §

 読み込むテキストのエンコードを判定するために、XML宣言の符号化宣言はまったく参照されていないようです。このような動作をされては、せっかく文字化け回避の工夫をこらしたXMLが泣きますね。

 とりあえず、特定のエンコードを強制して読み込ませる方法について、アイデアがありません。Operaのサポートは断念するか、あるいは「表示」→「エンコード」→「日本語」→「自動判定」以外の設定にしてはいけない、と注意書きを入れるか。

Operaよ、おまえもか §

 Safariのトラブルの多さに頭を抱えたのはついこの間のこと。

 しかし、追求を始めるとOperaもボロボロ……。

 ある程度まっとうに動いているのは、Internet ExplorerとFirefoxだけなのでしょうか?

 しかし、この惨状はむしろ面白いですね。ワクワクします。

付録・検証プログラム §

syncxml002.html (シフトJISで保存) §

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html LANG="ja-JP">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

<META http-equiv="Content-Script-Type" content="text/javascript">

<title>テストページ</title>

<script type="text/javascript"><!--

function viewText(name)

{

    httpobj = createHttpRequest();

    httpobj.open( "GET", name, false );

    httpobj.send(null);

    try

    {

        document.getElementById('text').value = httpobj.responseXML.documentElement.innerText;

    }

    catch(e)

    {

        document.getElementById('text').value = "例外発生: " + httpobj.responseText;

    }

}

function createHttpRequest()

{

    //Win IE用

    if(window.ActiveXObject){

        try {

            //MSXML2以降用

            return new ActiveXObject("Msxml2.XMLHTTP")

        } catch (e) {

            try {

                //旧MSXML用

                return new ActiveXObject("Microsoft.XMLHTTP")

            } catch (e2) {

                return null

            }

        }

    } else if(window.XMLHttpRequest){

        //Win IE以外のXMLHttpRequestオブジェクト実装ブラウザ用

        return new XMLHttpRequest()

    } else {

        return null

    }

}

// --></script>

</head>

<body>

<p>

<input type="button" onclick="viewText('data1utf8.xml');" 

    value="UTF-8で読み込む" ></input>

<input type="button" onclick="viewText('data1utf16.xml');" 

    value="UTF-16で読み込む" ></input>

</p>

<textarea id="text" rows="6" cols="40" readOnly></textarea>

</body>

</html>

data1utf8.xml (BOM無しUTF-8で保存) §

<?xml version="1.0" encoding="UTF-8"?>

<root>「今日の味噌汁の具は何だい?」

「ふ」

「なんと。今日ふの味噌汁(きょうふのみそしる)か!」</root>

data1utf16.xml (BOM付きUTF-16で保存) §

<?xml version="1.0" encoding="UTF-16"?>

<root>「今日の味噌汁の具は何だい?」

「ふ」

「なんと。今日ふの味噌汁(きょうふのみそしる)か!」</root>

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2005年
12月
18日
tina.piedey.co.jpへの侵入発見と対策の記録
3days 0 count
total 6049 count
【技術雑記】の前のコンテンツ
2005年
12月
10日
まさか解決策不在なのか? OperaのXMLHttpRequestオブジェクトのresponseTextが文字化けする問題の更なる深み
3days 0 count
total 8259 count

このサイト内の関連コンテンツ リスト

2005年
12月
10日
まさか解決策不在なのか? OperaのXMLHttpRequestオブジェクトのresponseTextが文字化けする問題の更なる深み
3days 0 count
total 8259 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20051210182527
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.