[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

"[ajax] Safari の responseText で UTF-8 コード文字化け回避" へのコメントを書く

お名前
メールアドレス
ホームページアドレス
コメント