I\'m trying to use the tree command in a windows commandline to generate a text file listing the contents of a directory but when I pipe the output the unicode characters get st
I decided I had to have a look at tree.com
and figure out why it's not respecting the Unicode setting of the console. It turns out that (like many of the command-line file utilities), it uses a library called ulib.dll
to do all the printing (specifically, TREE::DisplayName
calls WriteString
in ulib
).
Now, in ulib
, the WriteString
method is implemented in two classes, SCREEN
and STREAM
. The SCREEN
version uses WriteConsoleW
directly, so all the Unicode characters get correctly displayed. The STREAM
version converts the Unicode text to one of three different encodings (_UseConsoleConversions
⇒ console codepage (GetConsoleCP
), _UseAnsiConversions
⇒ default ANSI codepage, otherwise ⇒ default OEM codepage), and then writes this out. I don't know how to change the conversion mode, and I don't believe the conversion can be disabled.
I've only looked at this briefly, so perhaps more adventurous souls can speak more about it! :-)