CMD中对管道和重定向的支持简直扯淡,可以这样测试一下:
1.用cmd/u打开一个Unicode的控制台
2.用echo abcdefg>abc.txt向abc.txt输出文本
3.然后type abc.txt看看,是不是乱码了。。。
CMD在使用>>追加的时候也并不能通过BOM自动识别编码,因此总是会乱码。。。
XXXXho abcdefg>>一个UTF16文本.txt
2.type 一个UTF16文本.txt
所以CMD对Unicode的支持仅限于显示层面,重定向以后根本就是扯淡。。。
PowerShell的做法就更扯淡了:
1.内部命令用|管道传给外部程序的是ANSI
2.外部程序用|管道传给内部命令的内容,可以根据BOM识别是ANSI、UTF-8、UTF-16LE、UTF-16BE编码。
3.外部程序被>或>>重定向后,实际上是重定向到了PowerShell托管的管道,由PowerShell统一接收信息,识别编码,并转为UTF-16LE。
也就是说,对于管道和重定向支持Unicode,微软的实现也很混乱。。。