acmilan作者
10年11个月前修改于 10年11个月前IP:四川
802882
5楼
CMD中对管道和重定向的支持简直扯淡,可以这样测试一下:
1.用cmd/u打开一个Unicode的控制台
2.用echo abcdefg>abc.txt向abc.txt输出文本
3.然后type abc.txt看看,是不是乱码了。。。
CMD在使用>>追加的时候也并不能通过BOM自动识别编码,因此总是会乱码。。。
1.echo 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,微软的实现也很混乱。。。
评论
文号 / 802882

千古风流
名片发私信
学术分 4
总主题 466 帖总回复 2942 楼拥有证书:进士 学者 笔友
注册于 2009/05/30 21:22:42最后登录 2019/01/31 17:16:38
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的