Unicodeテキストファイル(UTF-8として保存)をクリーンアップするスクリプトを作成しています。3.xはデフォルトでUTF-に設定されているため、より一般的な2.xではなくPython 3.x(3.2)を使用することにしました。 8.8。何か間違ったことをしているのかもしれませんが、少なくともprintステートメントはまだデフォルトでUTF-8になっていないようです。特殊文字を含む文字列(以下のメッセージは文字列です)を印刷しようとすると、次のようなUnicodeEncodeErrorが発生します。
print(label, msg)
... in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u0968' in position
38: character maps to <undefined>
最初にencode()メソッドを使用すると(デフォルトではUTF-8にうまく機能します)、エラーを回避できます。
print(label, msg.encode())
これは、ユニコード文字列を含むオブジェクトまたはリストを印刷する場合にも機能します。これは、str()がデフォルトでUTF-8に設定されているように見えるため、デバッグ時によく行う必要があります。しかし、print(myobj)を実行するたびに、print(str(myobj).encode())を使用することを本当に覚えておく必要がありますか?もしそうなら、私はそれを自分の関数でラップしようと試みることができると思いますが、print()がサポートするすべての引数の順列を処理することに自信がありません。
また、私のスクリプトはファイルから正規表現をロードし、それらを1つずつ適用します。encode()を適用する前に、私はコンソールにかなり読みやすいものを印刷することができました:
msg = 'Applying regex {} of {}: {}'.format(i, len(regexes), regex._findstr)
print(msg)
Applying regex 5 of 15: ^\\ge[0-9]*\b([ ]+[0-9]+\.)?[ ]*
ただし、正規表現にリテラルのUnicode文字が含まれているとクラッシュするため、最初に文字列にencode()を適用しました。しかし、現在、正規表現は画面上で非常に読みにくくなっています(そして、これらの正規表現をディスクに保存するコードを書き込もうとすると、同様の問題が発生する可能性があります)。
msg = 'Applying regex {} of {}: {}'.format(i, len(regexes), regex._findstr)
print(msg.encode())
b'Applying regex 5 of 15: ^\\\\ge[0-9]*\\b([ ]+[0-9]+\\.)?[ ]*'
私はまだPythonの経験が浅いので、誤解しているかもしれません。説明やチュートリアルへのリンク(Python 3.xの場合、オンラインで表示されるもののほとんどは2.xの場合)をいただければ幸いです。