Home > Django | 技術全般 > Safariで文字化けでDjangoのHttpRequestのcharset指定などを見直す

Safariで文字化けでDjangoのHttpRequestのcharset指定などを見直す

男の小遣い帳で、Ajaxでデータを取得したときにSafariで文字化けしていた。
自宅のサーバーでは動いていたからおかしいなーと思ってたんだけど、レスポンスヘッダのContent-Typeにcharset指定が無かったようだ。

自宅ではhttpd.confに
AddDefaultCharset UTF-8
と書いていたけど、共用サーバーでそんな設定はしないよな。

とりあえずDjangoからAjaxのレスポンスを返すときに
values = simplejson.dumps(data, ensure_ascii=False)
return HttpResponse(values, mimetype=”text/plain”)

となっていたのを以下に変更。
values = simplejson.dumps(data, ensure_ascii=False)
return HttpResponse(values, mimetype=”text/plain; charset=UTF-8″)

この対応で大丈夫か確認のため、一応Djangoのソースを見てみた。
HttpRequestクラスでは
def __init__(self, content='', mimetype=None):
from django.conf import settings
self._charset = settings.DEFAULT_CHARSET
if not mimetype:
mimetype = “%s; charset=%s” % (settings.DEFAULT_CONTENT_TYPE, settings.DEFAULT_CHARSET)
if not isinstance(content, basestring) and hasattr(content, ‘__iter__’):
self._container = content
self._is_string = False
else:
self._container = [content]
self._is_string = True
self.headers = {’Content-Type’: mimetype}
self.cookies = SimpleCookie()
self.status_code = 200

となっていて、mimetype指定があるときはそのままContent-Typeに突っ込んでいるので、charset指定も普通のヘッダのように書き足してOKっぽい。
mimetypeにcharsetが入っていなかったら、自動的にDEFAULT_CHARSETを追加してくれれば良いのに。HttpResponseにmimetypeを指定するときは、charsetも入れておいたほうが良さそう。

これでとりあえず動いたんだけど、どうやらSafariはそもそも文字化け問題を含んでいるらしい。
(恥ずかしながら知らなかった。)
古いSafariだとContent-Typeでちゃんとcharset指定してもダメなのかな?

とりあえずJavascriptも直しておこうというわけで、以下を参考に直した。
[ajax] Safari の responseText で UTF-8 コード文字化け回避 Kawa.netブログ(川崎有亮)/ウェブリブログ
最速インターフェース研究会 :: SafariのAjaxの文字化けをクライアント側だけで対応するバッドノウハウ
レスポンスヘッダでcharsetを返さなくても、この対応をすれば動作した。

サーバー側もJavascript側も対応して、とりあえず完了。

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://blog.joyfullife.jp/archives/2007/07/19152125.php/trackback
Listed below are links to weblogs that reference
Safariで文字化けでDjangoのHttpRequestのcharset指定などを見直す from 30からのBlog

Home > Django | 技術全般 > Safariで文字化けでDjangoのHttpRequestのcharset指定などを見直す

Search
Feeds
Meta

Return to page top