2017年7月30日日曜日

【Docker】UnicodeEncodeError: 'ascii' codec can't encode characters in position. Dockerのターミナルで日本語を使う

  • 公開日:2017年07月30日

記事概要

機械学習の環境をdockerで生成して、ターミナルに日本語を出力処理するとエラーが発生します。
この記事はdockerで日本語を出力する方法を記載した記事です。

環境

  • Docker version 17.06.0-ce
  • ubuntu 16.04.2 LTS
  • Python 3.6.1 :: Anaconda custom (64-bit)

ターミナル

dockerのubuntu環境だと、デフォルトでターミネルの日本語の出力ができません。
MeCabなどを使ってprintで文字を出力しようとすると、
'ascii' codec can't encode characters in position
が発生します。

これだと使いにくいので、dockerのターミネルで日本語を利用できるようにします。

locale変更

localeを日本語に変更します。

terminal

locale

LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

dockerのデフォルトは、POSIXです。なので、日本語にします。

terminal

export LC_ALL=ja_JP.UTF-8

変更を確認します。

terminal

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


これで完了です。pythonのMecabを実行して確認します。

terminal

python tolenize_ja.py
第 9 9 回 全国 高校 野球 選手権 埼玉 大会 は 、 花咲 徳 栄 が 3 年 連続 5 回 目 の 優勝 を 果たし 、 県内 1 5 6 チーム ( 1 6 1 校 ) の 頂点 に 立っ た 。 

正常に日本語が出力されました、

まとめ

機械学習の環境にDockerを使うのは、とても良い選択です。Dockerの学習は慣れるまで大変ですが、使えば使うほど生産性も向上するので、ぜひ利用してください。

PICK UP オススメ本

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...