正確なコードと受け取った正確なエラーを投稿しましたか? cp437
コードは aとutf-8
端末の両方でエラーをスローせずに機能するためです。いずれにせよ、端末に送信する前に Unicode 文字列を正当化する必要があります。UTF-8 でエンコードされた中国語は、エンコード時の長さが 2 ではなく 6 であるため、違いに注意してください。
>>> sys.stdout.write(s.encode('utf-8').ljust(20) + "hello")
你好 hello
>>> sys.stdout.write(s.ljust(20).encode('utf-8') + "hello")
你好 hello
また、中国語の文字は、一般的な固定幅フォントの他の文字よりも幅が広いため、言語が混在している場合、希望どおりに整列しない場合があることに注意してください (解決策については、この回答を参照してください)。
>>> sys.stdout.write("12".ljust(20) + "hello")
12 hello
通常、明示的なエンコーディングをスキップしてstdout
. Python は、ターミナルのエンコーディングで Unicode 文字列をターミナルに暗黙的にエンコードします (「 」を参照sys.stdout.encoding
)。
sys.stdout.write(s.ljust(20))
別のオプションは次を使用していprint
ます:
print "%20s" % s # old-style
また:
print '{:20}'.format(s) # new-style