事象
- AWS CLI を実行すると、"'ascii' codec can't encode characters in position 1-7: ordinal not in range(128)" と怒られる。
% aws emr list-clusters { "Clusters": [ { "Status": { "Timeline": { "ReadyDateTime": 1512532909.567, "CreationDateTime": 1512532287.771, "EndDateTime": 1512537171.682 }, "State": "TERMINATED", "StateChangeReason": { "Message": "Terminated by user request", "Code": "USER_REQUEST" } }, "NormalizedInstanceHours": 48, "Id": "j-1PM1S2K26V0K", "Name": 'ascii' codec can't encode characters in position 1-7: ordinal not in range(128)
- 環境変数 LANG には C がセットされている。
% echo $LANG C
原因
- 標準出力する内容にマルチバイト文字が含まれるが、環境変数 LANG に C がセットされているため、ascii で標準出力しようとしている。
一方でf.writeでは「文字コードの指定ないからようわからん。asciiでいいやろ。」と考えasciiに変換しようとするのですが、当然日本語には対応できずエラーとなります。
Python2における文字列「文字型」と「ユニコード型」についてザックリとまとめた - 小さな星がほらひとつ