2

匿名パイプを使用してすべての stdout をキャプチャし、stderr をリッチエディットに出力しました。 wsprintf を使用しても問題ありませんが、マルチバイト文字を使用する python は本当に私を悩ませます。これらすべての出力をユニコードに変換するにはどうすればよいですか?

2010 年 1 月 3 日更新:

返信いただきありがとうございますが、動作中にエラーが発生した場合、リダイレクトされたstderrがエラーメッセージをマルチバイト文字列でキャプチャするため、Pythonでメッセージをユニコードで出力する方法はありますかstr.encode()? この投稿には利用可能な解決策があるようです。print xxxpy_runxxx()

後で試してみます。

4

3 に答える 3

9

まず、Windows コンソールでは Unicode が完全にサポートされていない可能性があることに注意してください。

以下の例では、 UTF-8stderrstdout使用して Python 出力を作成します。必要に応じて、他のエンコーディングに変更できます。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import codecs, sys

reload(sys)
sys.setdefaultencoding('utf-8')

print sys.getdefaultencoding()

sys.stdout = codecs.getwriter('utf8')(sys.stdout)
sys.stderr = codecs.getwriter('utf8')(sys.stderr)

print "This is an Е乂αmp١ȅ testing Unicode support using Arabic, Latin, Cyrillic, Greek, Hebrew and CJK code points."
于 2010-01-04T19:54:37.600 に答える
0

文字列を Unicode としてマークする (ie: u'Hello World') か、すべての文字列が持つ encode() メソッドを使用することで、Python で Unicode を扱うことができます。

例えば。Unicode 文字列 aStringVariable があると仮定します。

aStringVariable.encode('utf-8')

UTF-8に変換します。「utf-16」は UTF-16 を提供し、「ascii」はそれをプレーンな古い ASCII 文字列に変換します。

詳細については、次を参照してください。

于 2010-01-03T06:29:32.440 に答える
-1

wsprintf

これは、Pythonの質問ではなく、「C /C++」の質問のようです。

Pythonインタープリターは、Unicode(または「ワイド」)文字列ではなく、常にバイト文字列をstdout/stderrに書き込みます。これは、Pythonが最初に現在のエンコーディングを使用してすべてのUnicodeデータをエンコードすることを意味します(可能性が高いsys.getdefaultencoding())。

stdout / stderrをUnicodeデータとして取得する場合は、適切なエンコーディングを使用して自分でデコードする必要があります。

お気に入りのC/C ++ライブラリには、確かにそれを行うために必要なものがあります。

于 2010-01-03T19:41:50.910 に答える