Python3:sys.stdout在linux和windows上给出不同的结果

时间:2017-07-19 06:05:33

标签: python character-encoding stdout

代码输出因Linux和Windows而异。我对编码不太熟悉,这就是这个问题所涉及的问题。

这是我的代码:

import sys
from treelib import Tree
from io import StringIO

# creating and populating tree
tree = Tree()
tree.create_node("Harry", "harry")  # root node
tree.create_node("Jane", "jane", parent="harry")
tree.create_node("Bill", "bill", parent="harry")
tree.create_node("Diane", "diane", parent="jane")
tree.create_node("Mary", "mary", parent="diane")
tree.create_node("Mark", "mark", parent="jane")

# var to store standard output

output = StringIO()

sys.stdout = output

tree.show()
# restoring standard output to console
sys.stdout = sys.__stdout__

tree_structure = output.getvalue()

print(tree_structure)

我在Linux上获得预期的输出但在Windows上的结果将字符编码为 \ xNN

Linux输出:

Harry
├── Bill
└── Jane
    ├── Diane
    │   └── Mary
    └── Mark

Windows输出:

b'Harry\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Bill\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Jane\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Diane\n    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Mary\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Mark\n'

虽然sys.stdout.encoding的结果在Windows和Linux上都是'utf-8'

我能达到预期输出的最接近的是在print语句之前添加以下内容:

#removing b'' from string
tree_structure = tree_structure[2:-2]
# converting to bytes
tree_structure = bytes(tree_structure,'utf-8')

tree_structure = tree_structure.decode('unicode_escape')

print(tree_structure)
之后

输出:

Harry
âââ Bill
âââ Jane
    âââ Diane
    â   âââ Mary
    âââ Mark

2 个答案:

答案 0 :(得分:0)

这很可能是您的Windows终端问题,而不是您的代码。

尝试在控制台中设置chcp 65001,将代码页更改为UTF-8。 之后print("├")对我有用。

https://technet.microsoft.com/en-us/library/bb490874.aspx

答案 1 :(得分:0)

我可以使用codecs获得预期的输出。这 answer对我有所帮助。 使用编解码器工作。

Identity Inspector