1

私は非常に多くのpython/unicodeの説明をふるいにかけましたが、これを理解できないようです。

状況は次のとおりです。

私はredditから大量のコメントを引き出しています(ボットを作成しています)。主にそれらをMongoDBに保存したいのですが、何が起こっているのかを手動で確認するためにコメントツリーを印刷できる必要もあります。

これまでのところ、コメントを DB に入れるのに問題はありませんでしたが、stdout に出力しようとすると、CP1252 文字セットが明らかにサポートしていない文字で問題を抱えています。

私が読んだように、Python 3 ではすべての内部 (文字列) が Unicode として保存されます。入力と出力はバイトでなければならないため、これで問題ありません - Unicode を CP1252 にエンコードでき、いくつかの状況で \ が表示されます。私が気にしない x** 文字 - 範囲外の文字を表していると思いますか?

問題は、\n (改行) とタブを使用して (stdout に) コメント ツリーを出力していたので、簡単に確認できたのですが、改行エスケープ シーケンスを使用して Unicode 文字列をエンコードすると、それらがエスケープされるため、リテラルとして出力されるようです。 .

参考までに、私のエンコード文は次のとおりです。

encoded = post.tree_to_string().encode('cp1252','ignore')

ありがとう

編集:

私が欲しいのは

|Parent Comment

    |Child comment 1

        |GChild comment 1

    |Child comment 2

|Parent Comment 2

私が得るものは

b"\n|Parent comment \n\n |Child comment \n\n etc
4

3 に答える 3

0

Python3で印刷するために文字列をバイトにエンコードする必要はありません。stdout(コンソール)をユニコード環境にするだけです...

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

于 2013-10-06T15:08:55.640 に答える
0

問題を正しく理解できたかどうかわかりませんが、stdout に出力する前に改行とタブを削除していただけないでしょうか?

print(re.sub('[\t\n]', ' ', post.tree_to_string()))

hereで説明されているように、すべての制御文字を削除するように Python に指示することもできます。

于 2013-10-06T14:40:41.053 に答える