「?」を使用しないことを強くお勧めします。代替文字として。あなたの出力エンコーディングをUTF-8に設定し、それを使って終了してください。
for s in ("stdin","stdout","stderr"):
setattr(sys, s, io.TextIOWrapper(getattr(sys, s).detach(), encoding="utf8"))
代わりにPythonが出力エンコーディングについて推測停止するように、UTF8にごPYTHONIOENCODING
envariableを設定します。
いずれのアプローチも、手動でエンコードするよりもはるかに優れています。これは愚かです。
あなたがのpython3にアップグレードすることを拒否した場合、私はまた、すべての愚かなu'...'
ものを追放するために
from __future__ import unicode_literals
をお勧めします。このような
最近、私が開始したすべての私のPython progamsは:
#!/usr/bin/env python3.2
# -*- coding: UTF-8 -*-
from __future__ import print_function
from __future__ import unicode_literals
import re
import sys
import os
if not (("PYTHONIOENCODING" in os.environ)
and
re.search("^utf-?8$", os.environ["PYTHONIOENCODING"], re.I)):
sys.stderr.write(sys.argv[0] + ": Please set your PYTHONIOENCODING envariable to utf8\n")
sys.exit(1)
import unicodedata
if unicodedata.unidata_version < "6.0.0":
print("WARNING: Your old UCD is out of date, expected at least 6.0.0 but got",
unicodedata.unidata_version)
wide_enough = (sys.maxunicode >= 0x10FFFF)
if not wide_enough:
print("WARNING: Narrow build detected, your Python lacks full Unicode support!!")
あなたのロケールの設定は、実際に端末の設定と一致していますか? –
端末の設定に頼らないでください。すべてのエンコーディングをUTF-8に設定し、すべてのheisenbugを破棄します。 – tchrist