Pythonでコマンドライン引数に渡されたマルチバイト文字をunicode型に変換する
argparseでマルチバイト文字を渡すとバイト列型として取得される
unicode型として扱いたい場合はdecodeする必要があるが、エンコーディングをどうするべきか調べてた
多分sys.getfilesystemencodingを使えばいいんだと思うけど、macosxのpython2、python3でしか試していない。
windowsとかlinuxでロケールの設定が特殊な場合とかも正常に動くかどうか不明
sample.py
# coding=utf-8 import sys import argparse import six parser = argparse.ArgumentParser() parser.add_argument("string", type=str) args = parser.parse_args() # 入力値 s = args.string if isinstance(s, six.binary_type): fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding() s = s.decode(fs_encoding) print(s) print(s.__class__) print(len(s)) assert isinstance(s, six.text_type)
実行結果
python2.7.5
$ python test.py あいうえお あいうえお <type 'unicode'> 5
python3.3.2
$ python arg_encoding.py あいうえお あいうえお <class 'str'> 5