s3cmd で日本語ファイルを ダウンロード、アップロードしたい

  • 7
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

s3cmd で 日本語が含まれるディレクトリ、ファイルをアップロード、ダウンロードしようとすると、

↓のようなエラーがでます。

[root@localhost ~]# s3cmd --config=/s3cmd/.s3cfg get s3://meister-staging-webroot-published/Account/1/footer_image2/フッタ.gif /tmp/

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    An unexpected error has occurred.
  Please report the following lines to:
   s3tools-bugs@lists.sourceforge.net
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Problem: UnicodeEncodeError: 'ascii' codec can't encode characters in position 63-65: ordinal not in range(128)
S3cmd:   1.0.0

Traceback (most recent call last):
  File "/usr/bin/s3cmd", line 2006, in <module>
    main()
  File "/usr/bin/s3cmd", line 1950, in main
    cmd_func(args)
  File "/usr/bin/s3cmd", line 439, in cmd_object_get
    remote_list = fetch_remote_list(args, require_attribs = False)
  File "/usr/bin/s3cmd", line 281, in fetch_remote_list
    uri_str = str(uri)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 63-65: ordinal not in range(128)

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    An unexpected error has occurred.
    Please report the above lines to:
   s3tools-bugs@lists.sourceforge.net
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

これは、

  • s3cmd → Pythonで書かれている
  • Pythonのデフォルトエンコーディング → ASCII

というのが原因の模様。

なので以下のような作業を行い、UTF-8 を扱えるようにすれば、日本語のファイルを扱うことができます。

[root@localhost ~]# cp -ra /usr/bin/s3cmd /usr/bin/s3cmd.orig
[root@localhost ~]# vim /usr/bin/s3cmd
#!/usr/bin/python

## Amazon S3 manager
## Author: Michal Ludvig <michal@logix.cz>
##         http://www.logix.cz/michal
## License: GPL Version 2

import sys
reload(sys)
sys.setdefaultencoding("UTF-8")
[root@localhost ~]# diff /usr/bin/s3cmd /usr/bin/s3cmd.orig
9,10d8
< reload(sys)
< sys.setdefaultencoding("UTF-8")