Ajaxで今よみがえる(^^;;-->[クロスブラウザ技術 ]DHTMLサンプル集
古籏一浩さんとのはじめての共著 発売中-->『Ajax実践テクニック』 古籏一浩/高橋 登史朗 (著)秀和システム
配本予約開始-->『入門Ajax 増補改訂版 』 高橋 登史朗 (著)ソフトバンククリエイティブ ; ISBN: 4797336242
-- リスト --
【カテゴリー】 ActionScript ( 4 ) AjaSQL ( 9 ) Ajax ( 541 ) Arax ( 1 ) canvas ( 9 ) CSS ( 8 ) DLNA ( 1 ) Dojo ( 16 ) DOM ( 44 ) ES4 ( 3 ) 反重力物質 ( 1 ) ffAdd-on ( 1 ) Flash ( 45 ) Flash Remoting ( 11 ) FTP ( 2 ) GAF ( 9 ) Google Maps ( 106 ) GPS ( 38 ) HTTPヘッダサンプル ( 9 ) IPv6 ( 1 ) 漫画 ( 1 ) Java ( 44 ) JavaScript ( 232 ) jKamo ( 8 ) jQuery ( 66 ) jquery-ref ( 1 ) jsGadget ( 19 ) jslb_ ( 3 ) jslb_ajax ( 9 ) JSON ( 44 ) JSR223 ( 7 ) kjscmd ( 1 ) KNOPPIX ( 1 ) Linux ( 14 ) Mac ( 8 ) Memo ( 3 ) Microformats ( 2 ) Mini AJAX ( 2 ) MochiKit ( 2 ) mootools ( 2 ) Movable Type ( 57 ) MySQL ( 9 ) NewGameWeb ( 2 ) Nucleus ( 8 ) OpenAJAX ( 3 ) OpenDocument ( 1 ) OS ( 5 ) P2P ( 2 ) Perl ( 7 ) PHP ( 37 ) PostGIS ( 1 ) PostgreSQL ( 3 ) prototype.js ( 21 ) ROBOT ( 1 ) RSSリーダー ( 14 ) Ruby on Rails ( 7 ) Spry ( 6 ) SQLite ( 10 ) SQLiteWorker ( 2 ) ssh ( 1 ) SSI ( 2 ) SVG ( 15 ) TRON ( 1 ) Video ( 1 ) VML ( 1 ) Webサービス ( 89 ) widget ( 6 ) Wiki ( 1 ) Win ( 6 ) WSH ( 1 ) X01HT ( 29 ) XML ( 28 ) XOOPS ( 1 ) XQuery ( 2 ) XUL ( 3 ) Yahoo! UI ( 58 ) 日付入力用カレンダー ( 1 ) 『Ajax実践テクニック』 ( 1 ) 『入門 Ajax』 ( 42 ) WinTips ( 2 ) こりゃすごい ( 1 ) チューニング ( 20 ) ダイナミックロード関数 ( 7 ) リファレンス ( 13 ) ライブラリ ( 83 ) レーダー雨量表示 ( 1 ) ハード ( 15 ) ペンギン ( 2 ) ブラウザ ( 56 ) ブログでBBS ( 1 ) アクセスグラフ ( 3 ) カレンダーによる日付入力スクリプト ( 4 ) クロスブラウザ ( 10 ) クロスブラウザ関数 ( 7 ) スマートフォン ( 8 ) セキュリティ ( 87 ) ソフトイーサ ( 1 ) マッシュアップ ( 22 ) 暗号 ( 4 ) 映画 ( 41 ) 河川の水位グラフ ( 3 ) 回線 ( 2 ) 開発ツール ( 16 ) 牛久大仏 ( 8 ) 携帯 ( 112 ) 言語 ( 17 ) 故障 ( 1 ) 洪水警報システム ( 2 ) 今日のひと言 ( 2 ) 仕様 ( 39 ) 雑談 ( 199 ) 書籍 ( 17 ) 親子ウインドウ有無の確認関数 ( 3 ) 新海誠 ( 3 )

【info】有料サポート(ベータ)限定 承り中 /【JSサポート(仮称)】 

【費用】 とりあえず、言い値で承ります。ただし、できる範囲での限定受付です。込み具合等によりお受けできない場合がありますのであらかじめご了承ください。サポートにご納得いただけなければ料金は不要です。 逆に感動したら多くても構いません(^^;;;。

【できること】 たとえば、かも日記で無料配布されているコードのカスタマイズや、あるいは、JavaScript/Ajax全般+Webサーバーとの連携などのアドバイス&サンプル作成等 。A:jQchartなどでWeb用グラフ設置(エクセル→CSVやデータベースからWebグラフ生成)などのアドバイスやカスタマイズサンプル作成。B:ツリーメニューなどのカスタマイズサンプル。C:Google Mapsのカスタマイズ。etc...

【できないこと】 腕立て伏せ200回

【ライセンス】 私が今まで「かも日記」等で提供してきたコードの大半は、商用利用、改造、自由、連絡不要で、今後もそれらは変わりません。そして、この有料サポートによりカスタマイズコードなどが提供される場合でも、同様に、それらを商用利用しても改造しても自由です。ただし、制限のきついライブラリなどを使う場合は、各ライブラリのライセンスに準拠せざるを得ない場合があります。

【info】いつもいろいろなテストなどをページ内のあちこちでやっているので、重かったり、壊れていたりするf^^;ことも多いですが、何卒、ご了承ください ( _ _ b

2005年04月21日

【Ajax】responseされる文字コードの調査

Ajax , DOM , JavaScript , XML ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


予想通り、ブラウザバージョンごとの違いが結構あるので、
とりあえず、対策うんぬんを考える前に
問題点を洗い出して確定しておこうと思います。

まず、responseTextで受け取るファイルの文字コードによる、
ブラウザバージョンごとの振る舞いの違いです。

文字コード関連調査 [ responseText ]
http://jsgt.org/ajax/ref/charset_test/responsetext/test_1_make_table.php

XMLHttpRequestオブジェクトという名前が示すとおりなら、
utf-8やutf-16で書けば問題ないはずですが、やはり違います。

たとえば、
WinのIE6はUTF-8 、UTF-16ともに成功しますが、
MozillaやFirefoxは、Win、Mac、Linuxともに UTF-8 以外は文字化けします。
ところが、
Mac Safari1.2と
Win Opera8.0 では逆に、UTF-16以外が文字化けします。

しかも、SafariはBOM付でないUTF-16 BEやUTF-16 LEは失敗します。

と、まあ、日本人には、こんな現実がとりあえずありますので(^^;
心してかかる必要があります。

実は、responseXMLもresponseTextと異なるようなので(^^;
それも、これから調査します。

できました。
文字コード関連調査 [ responseXML ]
http://jsgt.org/ajax/ref/charset_test/responsexml/test_1_make_table.php



追記
2005.7.24
【ほぼ的結論と2次会的話題050724】
Ajaxでは、サーバーからデータを受信する際、生のテキスト文字列を使用すると、 responseText,responceXMLそれぞれに文字化けするブラウザがあります。
これは、Ajaxでの送受信時には、Formの時のようにブラウザが自動でURIエンコード/デコードをしてくれるわけではない、ということに起因すると言えるかもしれません。

そこで、UTF-8でURIエンコードした文字列をサーバーへ置いておけば解決しますが
サーバー側でスクリプトを使えるなら、、、

PHPとJavaScriptのURIエンコードを比較
http://jsgt.org/ajax/ref/charset_test/responsetext/php/urlencode.php

2005.4.24
とりあえずの、

1: responseXML

【中締め的結論050424】

responseXMLに関しては、UTF-8が安全です。XMLHttpRequestオブジェクトが存在して、かつ、UTF-8がだめなブラウザはLinuxのKonquerorのみという状態です。

FYI :
* XML宣言は省略してもOKですが、encoding属性だけを省略するとアウトです。
必ず、<?xml version="1.0" encoding="UTF-8"?>までしっかり書く必要があります。
* Konqueror/3.3 はすべての文字コードで失敗していますが、実はUTF-16とUTF-16 LE BOM では文字化けしていません。ただ、行末にあった半角空白が除去されて返って来たためマッチしませんでした。
* Konqueror/3.3 はsend(null)という書き方がエラーになりました。

UTF-8がOK

linux

  • Galeon/1.2.14

  • Firefox/0.10.1

  • Epiphany/1.0.4

  • Mozilla 1.7.3
  • Win

  • MSIE 6.0

  • Firefox/1.0.2

  • Firefox/0.8

  • Mozilla 1.0.2

  • Opera 8.0
  • Mac

  • Safari/312

  • Safari/125

  • OmniWeb/v563.34

  • Firefox/1.0.1

  • Mozilla 1.7.3
  • UTF-8がNG

    linux

  • Konqueror/3.3
  • Win

  • なし
  • Mac

  • なし
  • そもそもresponseXMLを受け取れない

    linux

  • Konqueror/3.2以前
  • Win

  • N4以前

  • Operaは7.x以前
  • Mac

  • IE

  • Safari/1.1x以前
  • その他

  • Moz,Ff, Safari 等の未実装バージョンは今のところ不明

  • * Mozillaはmilestone 0.9.7(nightlyビルドの 2001-11-28 以降に実装),Ffはすべてに実装,Safariは1.2x以降に実装

    【中締め的対策050424】
    Konquerorについて、とりあえず考えられそうな対策

    case(Konqueror)
    {

    • サーバー側で動的にUTF-16 LE BOM を吐き出す
          (末尾空白除去はあきらめる)

    • ブラウザ側で静的なUTF-16 LE BOM ファイルを取りに行く
          (末尾空白除去はあきらめる)

    • ブラウザ側でresponseText を使ってUTF-16 LE BOM ファイルを取りに行く

    • ブラウザ側でutf-8をutf-16へ書き換える
          (参考:utf.js (UTF-8 <-> UTF16 変換) ライブラリ)

    • Konquerorが対応するまで無視する

    }



    追記
    2005.4.28
    とりあえずの、

    2: responseText

    【中締め的結論050428】

    responseTextに関しては、UTF-8は、最もユーザーの多いWin IEやMozilla/Firefoxで使えますので、おおむね安全といえますが、Opera8やLinuxのKonqueror、MacのSafariは文字化けします。3ブラウザともBOM付のUTF-16ならOKです。

    FYI :
    * Konqueror/3.3 はsend(null)という書き方がエラーになりました。

    UTF-8がOK

    linux

  • Galeon/1.2.14

  • Firefox/0.10.1

  • Epiphany/1.0.4

  • Mozilla 1.7.3
  • Win

  • MSIE 6.0

  • Firefox/1.0.2

  • Firefox/0.8

  • Mozilla 1.0.2

  • Mac

  • OmniWeb/v563.34

  • Firefox/1.0.1

  • Mozilla 1.7.3
  • UTF-8がNG

    linux

  • Konqueror/3.3
  • Win

  • Opera 8.0
  • Mac

  • Safari/312

  • Safari/125
  • そもそもresponseXMLを受け取れない

    linux

  • Konqueror/3.2以前
  • Win

  • N4以前

  • Operaは7.x以前
  • Mac

  • IE

  • Safari/1.1x以前
  • その他

  • Moz,Ff, Safari 等の未実装バージョンは今のところ不明

  • * Mozillaはmilestone 0.9.7(nightlyビルドの 2001-11-28 以降に実装),Ffはすべてに実装,Safariは1.2x以降に実装

    【中締め的対策050428】
    Konqueror、Safari、Opera8について、とりあえず考えられそうな対策

    case(Konqueror||Safari||Opera8)
    {

    • サーバー側で動的にUTF-16 BOM を吐き出す

    • ブラウザ側で静的なUTF-16 BOM ファイルを取りに行く

    • ブラウザ側でresponseXML を使ってUTF-8 にそろえる
          (ただしKonqueror以外)

    • ブラウザ側でutf-8をutf-16へ書き換える
          (参考:utf.js (UTF-8 <-> UTF16 変換) ライブラリ)

    • Konqueror、Safari、Opera8がUTF-8対応するまで無視する

    }

    *とはいえ、もし、日本語を使うなら、responseXML を使う方が安全といえるでしょう。

    【追記2006.8】
    AjaxでShift_JISやEUC-JPは使えるのか?-1- responseText編
    (XHR/responseTextで読み込むファイルのcharset別 動作ブラウザ)
    http://jsgt.org/ajax/ref/charset_test/responsetext/seu8/sample.htm
    AjaxでShift_JISやEUC-JPは使えるのか?-2- responseXML編
    http://jsgt.org/ajax/ref/charset_test/responsetext/seu8xml/sample.htm