nginxで静的jsonファイル配信時に日本語が文字化けしないようにする


[まとめ] 現在開催中のKindleセール情報はこちら

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でも文字化けせずに受け取れます。

レスポンスヘッダーは正しく指定しましょう。自戒を込めて。

参考

[まとめ] 現在開催中のKindleセール情報はこちら