13

io.StringIOPython3のデフォルトのエンコーディングが見つからないようです。ロケールと同じstdioですか?

どうすれば変更できますか?

を使用stdioすると、正しいエンコーディングで再度開くだけで機能するように見えますが、を再度開くなどのことはありませんStringIO

4

2 に答える 2

14

このクラスio.StringIOstr、Python 3 のオブジェクトを操作します。つまり、インスタンスからのみ文字列の読み取りと書き込みを行うことができます。エンコーディングはありません。取得したStringIO文字列をオブジェクトでエンコードする場合は、エンコーディングを選択する必要がありますが、文字列自体にはエンコーディングがありません。StringIObytes

(もちろん、文字列は何らかのエンコーディングで内部的に表現する必要があります。インタープリターに応じて、そのエンコーディングは UCS-2 または UCS-4 のいずれかですが、Python で作業する場合、この実装の詳細は表示されません。)

于 2012-02-20T21:47:32.350 に答える
6

別の回答で既に述べたように、StringIO(Unicode) 文字列をメモリに保存するため、エンコーディングはありません。エンコーディング付きの同様のオブジェクトが必要な場合は、 を参照してくださいBytesIO

stdout のエンコーディングを設定したい場合: できません。sys.stdout.encoding書き込み専用であり、(多くの場合) Python によって自動的に決定されるため、少なくとも直接ではありません。(パイプを使用する場合は機能しません)特定のエンコーディングでバイト文字列を標準出力に書き込みたい場合は、出力する文字列を正しいエンコーディングでエンコードするか(Python 2)、またはsys.stdout.buffer.write()(Python 3)を使用してすでにエンコードされたものを送信しますバイト文字列を標準出力に。

于 2013-10-13T12:27:07.560 に答える