LoginSignup
2
2

More than 5 years have passed since last update.

Docker ImageのAmazonlinuxで日本語の文字コード変換をしたい

Last updated at Posted at 2017-11-26

何がしたいか

Docker imageのAmazonlinuxを使った開発環境で日本語を含んだファイルが文字化けしたので、これをなんとかしたい。
https://hub.docker.com/_/amazonlinux/

ファイルの文字コードはCP932であることはわかっていたのだけど、iconvを通してもUTF-8に変換されず、ハマってしまった。

どう解決したか

DockerfileにENVコマンドを下記のように追加することで解決した。

Dockerfile
FROM amazonlinux:latest
RUN yum -y update && yum clean all

~中略~

ENV LANG en_US.UTF-8

なぜen_US.UTF-8なのかというと、AWSのEC2でもおそらくデフォルトがen_US.UTF-8になっているため(後述)。
少なくとも自分が扱う要件では、en_US.UTF-8で問題なかったのでそのままにしている。
このようにしておけば、下記のlocaleが設定されるようになる。

bash
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

他のlocaleにする必要があるのであれば、それを指定してもらえれば良いと思う。
ただし、Docker imageのAmazonlinuxで最初から用意されているのは下記のlocaleとなっているらしいので、

bash
$ locale -a
C
en_AG
en_AG.utf8
en_AU
en_AU.iso88591
en_AU.utf8
en_BW
en_BW.iso88591
en_BW.utf8
en_CA
en_CA.iso88591
en_CA.utf8
en_DK
en_DK.iso88591
en_DK.utf8
en_GB
en_GB.iso88591
en_GB.iso885915
en_GB.utf8
en_HK
en_HK.iso88591
en_HK.utf8
en_IE
en_IE@euro
en_IE.iso88591
en_IE.iso885915@euro
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ
en_NZ.iso88591
en_NZ.utf8
en_PH
en_PH.iso88591
en_PH.utf8
en_SG
en_SG.iso88591
en_SG.utf8
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8
en_ZA
en_ZA.iso88591
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW
en_ZW.iso88591
en_ZW.utf8
POSIX

EC2ではどうなっていたか

確認に使ったのは下記のAMI。現時点(2017/11/07)では、Management ConsoleからEC2インスタンスの作成でAmazon Linux AMIを選択すれば使用されるAMIとなっている。
amzn-ami-hvm-2017.09.0.20170930-x86_64-gp2 (ami-2a69be4c)

上記のAMIを使って作成したEC2インスタンスでは、下記のような locale 設定になっているはず。

bash
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2