[ajax] Safari の responseText で UTF-8 コード文字化け回避

Safari の responseText では、Shift_JIS はおろか UTF-8 コードでも文字化けするため使いにくかったが、UTF-8 コードに対応する手順を考えた。

function get_response_text ( req ) {
var text = req.responseText;
if ( navigator.appVersion.indexOf( "KHTML" ) > -1 ) {
var esc = escape( text );
if ( esc.indexOf("%u") < 0 && esc.indexOf("%") > -1 ) {
text = decodeURIComponent( esc );
}
}
return text;
}
※2005/12/13 関数化した

実際のテキストファイルがUTF-8コードだったとしても、Safari 2.0のresponseTextはISO-8859-1コードか何かと誤認識したような文字列を返してくるので文字化けしてしまう。
そこで、ブラウザを判別して Safari ではいったんescapeで%HH形式に変換する。
このとき『UTF-8コードのエスケープ状態』と同じ文字列並びになっているから、これをさらにdecodeURIComponentで展開すればUTF-8コードの文字列として取り出すことができる!

※ブラウザ依存関数のescapeを逆手にとって使ってみました。

もっとも、さすがに Safari も今後のバージョンアップによってはちゃんと文字コードを認識するようになるだろうから、その時点では上記ルーチンで逆に文字化けが発生してしまうので、そのときにはバージョン番号で範囲特定などが必要になるけど、当面の間は、上記のif文を入れるだけでSafariでもUTF-8コードのテキストファイルを扱えるようになる!(⇒今後も副作用ないように書き換えました)

[参考]
http://jsgt.org/mt/archives/01/000287.html

この記事へのコメント

大変感謝
2006年01月23日 01:44
文字化けが解消しました。
どうもありがとうございます!
non
2006年06月29日 17:20
丁度プレーンテキストを扱った動的読込みでsafariの文字化けに悩まされていました。
有益な情報公開に感謝いたします。
ありがとうございました。
Psychs
2006年08月04日 20:06
同じ問題で悩んでいたので、助かりました。
prototype.js を改変して使ってみたところ、快適に動作してます。
ありがとうございます。
cval
2007年03月04日 19:59
感動。助かりました。
thomas
2007年06月27日 21:42
SafariのUTF-8誤解釈に悩まされていました。
SafariのVerUPを期待していたため後回しにしていたのですが、
対応する様子がなかったため非常に参考になりました。
ありがとう御座います。
negi
2007年12月15日 17:18
最新版で文字化けが復活した模様です。
現在調査中です。
anon
2008年02月17日 20:44
Safari3では、元のテキストのBOM有無で文字コード判定しているようですね。「BOMありならUTF-8」「BOM無しならISO-8859-1」というような挙動のようです。「BOMありUTF-8」のテキストなら、escape,decodeしないでもUTF-8として扱ってくれました。
hyou
2008年02月29日 22:11
Safari 3ではXMLHttpRequestで送信するファイルの拡張子でも、文字化けするしないが変わるようです。
Intel Mac版で確認した限りではhtml,htmはダメでtxt,xml,xhtmlはOK。極端な話拡張子なしでも化けませんでした。
加えて、escape()関数が吐き出すコードに"%u"が混じるようになったため、encodeURIComponentしたUTF-8と等価にならず、またif文にもひっかからず、変数textは不変のままです。
ありがとうございました!
2008年03月28日 00:02
文字化けに悩んでいたので助かりました。ありがとうございます!
orockbfStarr
2013年10月06日 05:35
Портал секс-знакомств знакомства секс сделан для того, чтобы заинтересованные люди имели возможность предложить друг другу интим безвозмездно. Всё начинается и заканчивается как обыкновенный виртуальный флирт, который никого ни к чему не обязывает. Но очень часто, рассмотрев портал знакомства в абакане без регистрации знакомств для интима, люди встречаются и приятно общаются друг с другом.

http://i.pixs.ru:/storage/1/8/9/SRSRRRRRRR_5689199_9115189.jpg

Добро пожаловать на самый популярный сайт секс знакомств
bobovbob
2014年03月28日 22:59
Тайные встречи без обязательств ждут вас! … В клубе: секс чат, интим объявления, контакты и фото партнеров, поиск встреч и вечеринок и многое другое
Сайт интим-знакомств Секс Сразу-для тех кто не любит ждать. Все прекрасно понимают что в наш век некогда ждать- уделять время флирту, ухаживаниям, походам в кино и по ресторанам.
Интим-доска быстрые и бесплатные интим знакомства для секса, любви и дружбы! … Ищу зрелую любовницу для разовых или частых встреч.
Знакомства для Встреч Meendo Ищу Любовника. … знакомства для встреч, знакомства для интимных встреч, знакомства для реальных встреч.
WilliamLat
2014年04月20日 17:01
Whitman'sv3Xwellh9Ya3Ey6Qバッグ 財布
works6Aandj1Ga1Hz2Z
sleepingh0Nofficescoacho9Ct0Sx8Gバッグ 財布
グッチ 財布
butv5Jthem7At0Vf1P
justd4Gaskd4Lk7Ri9GLouis Vuitton カバン
isu5Xreservedt8Nh8Ij8Q
processq9Sshoesg0Lq0Pk1Yヴィトン 財布
ofd7Cbutp7Uo3Qx5Z海外ファッションブランド
Louis Vuitton カバン

http://www.frankandeunice.com/pics/_notes/002.html
Anthonydus
2014年07月15日 20:08
BurtonKt
2014年08月02日 23:01
DennisHox
2014年09月04日 16:18

この記事へのトラックバック

  • MovableType のサイト内検索を Ajax 化

    Excerpt:  だいたいの MovableType を使った Blog に設置されて... Weblog: AUSGANG SOFT racked: 2005-12-26 09:52
  • Ajaxメモ2 - 文字コードについて

    Excerpt: 三位一体のからくりで、リッチな Web アプリを実現する Ajax。 HTML と JavaScript とサーバサイドスクリプトの文字コードの組み合わせはいかがなもんじゃろう? ということで、調査メ.. Weblog: お気楽極楽ブログ racked: 2006-02-11 17:11
  • MTでAjax!!~XMLHttpRequestでMTの各エントリーにメニューを読み込ませる~

    Excerpt: Road to me..では各エントリー、カテゴリー、マンスリーアーカイブにトップページと同じメニューを付けています。しかしながら過去のアーカイブは「すべて再構築」を実行するまでは「Recent En.. Weblog: Road to me ... racked: 2006-05-22 14:49
  • MTでAjax!!~XMLHttpRequestでMTの各エントリーにメニューを読み込ませる~

    Excerpt: Road to me..では各エントリー、カテゴリー、マンスリーアーカイブにトップページと同じメニューを付けています。しかしながら過去のアーカイブは「すべて再構築」を実行するまでは「Recent En.. Weblog: Road to me ... racked: 2006-05-22 14:55
  • SafariのresponseText

    Excerpt: Ajaxリクエストで返ってきたJSON文字列に日本語が含まれる場合にSafariが無限ループに陥る。 英語のみの場合は問題ないので、Contetnt-Typeが問題かと疑う。 サーバーサイドのプログ.. Weblog: そぶログ racked: 2006-06-21 03:05
  • Safari1.2でresponseTextが文字化けする

    Excerpt: responseTextだとsafari1.2で文字化けするので対処法を探していたところ [ajax] Safari の responseText で UTF-8 コード文字化け回避という非常に面.. Weblog: 開発中に色々あったことの備忘録 racked: 2006-07-03 01:53
  • ユーザー補助機能付リアルタイム郵便番号変換

    Excerpt: 巨大なデータを扱う機会が多くなってきたので、 データベースを導入することにしました。 とりあえずMySQLで。 入ってはいたのだけど、今まではxoops位しか使っていなかったのですが.. Weblog: ac-antenna racked: 2006-10-27 23:37
  • DamMapsバージョンアップしました

    Excerpt: DamMaps version1.0.2 http://www.dammaps.jp/ 今回のバージョンアップは…。 Safari文字化け対応 &#91;ajax&#93; Safari の res.. Weblog: 速報ダム日和 racked: 2007-01-18 23:25
  • Safariの文字化け問題

    Excerpt: WordPressのアクセス解析プラグインである、Wp-SlimStat-Exというものを使っているのだが、どうしても肝心の部分がSafariで文字化けしてしまう。 Googleパーソナライズも同様の.. Weblog: My wonderful living racked: 2007-06-27 21:25
  • Safariでdojoを使うと文字化けする件

    Excerpt: こみゅすけは,dojoというライブラリをかなりの勢いで使用している。dojoは数... Weblog: 天使やカイザーと呼ばれて racked: 2007-08-24 11:42
  • メモ:Safari の responseText で UTF-8 コード文字化け回避

    Excerpt: Safari の responseText で UTF-8 コード文字化け回避 Weblog: LOCK,STOCK racked: 2007-12-24 16:47
  • Ajax?????????????????

    Excerpt: ?????^^ ??????????? Safari 3 ?????????????????????? ????????????? (?�???) Firefo... Weblog: Movable Type ??? racked: 2008-02-22 21:04
  • [Mac Safari3.0.4]Thickboxの文字化け

    Excerpt: お客さんから指摘がありました Thickbox 3.1を利用しているサイトで、Thickboxで開いたら文字化けが起こるらしい… 環境:Mac Safari3.0.4 Thickboxを.. Weblog: 牢獄に暮らす奴隷 racked: 2009-04-30 21:24