nginxで静的jsonファイル配信時に日本語が文字化けしないようにする
androidアプリ開発時に、volleyを使ってjson形式のapiを取得する処理を書いていたのですが、jsonに日本語が入っていると文字化けする現象に遭遇しました。
調べてみるとapiのレスポンスヘッダーにContent-Typeが正しく指定されていない模様。
自前で用意したapiだったのでnginxの設定を変えて、正しくContent-Typeを指定するように修正したところ、文字化けが直りました。
- /etc/nginx/mime.types にjsonを追加
# sudo vi /etc/nginx/mime.types
types {
text/html html htm shtml;
# ・・・・
application/json json;
}
- jsonの文字コードがutf-8になるように指定
server {
listen 80;
# ・・・・
include /etc/nginx/mime.types;
charset UTF-8;
charset_types text/css application/json text/plain;
location /api.json {
default_type "application/json";
break;
}
}
- nginx設定再読み込み
sudo /etc/init.d/nginx configtest
sudo /etc/init.d/nginx reload
- curlで確認
curl -I "http://localhost/api.json"
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
これでvolleyでも文字化けせずに受け取れます。
レスポンスヘッダーは正しく指定しましょう。自戒を込めて。