2017-07-19 5 views
1

Die Ausgabe von Code variiert unter Linux und Windows.Ich bin nicht viel vertraut mit Codierungen, was ist, was dieses Problem scheint.Python3: sys.stdout gibt unterschiedliche Ergebnisse auf Linux und Windows

Hier ist mein Code:

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) 

Ich erhalte erwartete Ausgabe auf Linux, aber unter Windows Ergebnis haben Zeichen codiert als \ Xnn.

Linux Ausgabe:

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

Windows-Ausgang:

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' 

Obwohl das Ergebnis der sys.stdout.encoding'utf-8' war sowohl auf Windows und Linux.

Die nächstgelegene ich auf die erwartete Ausgabe erreichen konnte, war durch folgende bevor print-Anweisung hinzu:

#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) 

Ausgang nachher: ​​

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

Antwort

0

Ich konnte durch den Einsatz codecs die erwartete Ausgabe erhalten. Diese answer hat mir geholfen. Mit Codec funktioniert.

tree_structure = codecs.escape_decode(bytes(tree_structure, "utf-8"))[0].decode("utf-8") 
0

Dies ist höchstwahrscheinlich ein Problem mit Ihrem Windows-Terminal und nicht mit deinem Code.

Versuchen Sie chcp 65001 in Ihrer Konsole, die die Codepage in UTF-8 ändert. print("├") funktioniert für mich danach.

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

+0

Codepage auf UTF-8 einstellen funktionierte nicht. Es zeigt immer noch die gleiche Ausgabe. –

Verwandte Themen