Windows PowerShell 输出文件编码格式问题

Windows PowerShell 输出重定向 (“>”) 文件编码默认为UTF-16(LE)问题



问题描述:这两天在使用shp2pgsql时发现Windows PowerShell(为使行文方便,以下使用WPS替代Windows PowerShell,下不赘述)对于文件的输出重定向默认选择”UTF-16 (LE)”(微软称之为Unicode编码),而实际需要文件输出格式为”UTF-8”。
注意到此时本机上的msys2和bash都可将同一条语句的执行结果输出重定向为”UTF-8”编码文件,因此要从WPS本身着手解决这一问题。

在正式开始描述解决方案前,给出本机的相关环境:

  • 1.Windows 版本:10.0.16299.248
  • 2.WPS 版本:5.1.16299.248

注:WPS中查看WPS版本号的方式是键入:

$PSVersionTable

如果说你想一劳永逸的解决这个问题,那么最好是直接设置WPS的默认输出文件的编码格式(这是由于在版本号高于5.0的WPS中,输出重定向符号”>”实际上是操作“Out-File”的别名),则应在WPS中执行:

$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'



如果你还有兴趣往下看,那么我提醒大家注意WPS和cmd中的一点区别:

  • 在cmd中,我们常用chcp 65001来切换当前命令行窗口工作编码格式为”UTF-8”,并且经过我的测试,发现这种改变也会作用到当前命令行窗口的输出重定向文件编码格式(由于cmd默认采用本地编码,那么在国内windows机器上大部分时候默认工作编码将会是gbk,如果你想要永久更改cmd窗口的工作编码为”UTF-8”,那么应当从注册表着手,你可以亲自动手搜索相关的教程)。
  • 但如果你在WPS中继续应用chcp 65001语句改变编码后,你会发现这将无法作用到你当前WPS窗口的输出重定向文件编码格式(换言之,编码格式还是UTF-16)。

如果你只是偶尔而不是经常用到”UTF-8”格式文件,那么一个更明智的选择是在输出重定向时手动指定文件的编码格式而不是更改WPS中的默认输出文件编码格式。
以一个例子为例,假如你想在保持WPS默认输出文件编码为”UTF-16”将某一个命名的结果输出重定向到为”UTF-8”,那么你需要采用这样的命令:

<your command> | out-file 1.txt -encoding utf8
  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值