使用 PowerShell 类型命令会导致无效字符。
使用 PowerShell 类型命令会导致无效字符。
在PowerShell中,默认情况下,当你将命令的输出重定向到文件或通过管道传输到其他地方时,编码是UTF-16,这并不方便。我正在寻找将其更改为UTF-8的方法。
可以通过逐个替换>foo.txt
的语法为| out-file foo.txt -encoding utf8
来逐个更改。但是每次都这样做很麻烦。
在PowerShell中持久设置的方式是将它们放在\Users\me\Documents\WindowsPowerShell\profile.ps1
文件中;我已经验证了这个文件确实在启动时执行。
有人说可以通过$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'}
来设置输出编码,但我尝试过,并没有效果。
https://blogs.msdn.microsoft.com/powershell/2006/12/11/outputencoding-to-the-rescue/提到了$OutputEncoding
,乍一看似乎与此相关,但然后它又提到了输出以ASCII编码,这并不是实际发生的情况。
如何设置PowerShell使用UTF-8编码?
powershell类型的命令会导致无效字符的问题。原因是使用PowerShell在Windows上进行输出重定向时,创建的文件采用UTF-16编码。为了解决这个问题,可以尝试以下方法:
mysqldump.exe [options] --result-file=dump.sql
问题原因:powershell中使用type命令导致无效字符的出现。
解决方法:使用write-output命令代替type命令,并使用out-file命令将输出内容追加到文件中,同时指定编码为utf8。
具体代码如下:
write-output "your text" | out-file -append -encoding utf8 "filename"
如果需要将多个命令的输出内容同时追加到文件中,可以使用大括号将这些命令括起来,并通过管道将输出内容传递给out-file命令。
具体代码如下:
{ command 1 command 2 } | out-file -append -encoding utf8 "filename"
此外,根据问题中的引用,“可以通过替换'>foo.txt'语法为'| out-file foo.txt -encoding utf8'来逐个解决问题,但每次都要重复这样做非常麻烦。”也就是说,建议的解决方法正是问题的提问者想要避免的。因此,建议避免使用-append参数。
为了解决powershell中使用type命令导致无效字符的问题,可以使用write-output命令代替type命令,并使用out-file命令将输出内容追加到文件中,同时指定编码为utf8。同时,可以使用大括号将多个命令括起来,并通过管道将输出内容传递给out-file命令。避免使用-append参数。
问题:powershell类型的命令导致无效字符
原因:
- 在Windows PowerShell中,默认情况下,使用的字符编码是不一致的。
- 默认情况下,Out-File和> / >>命令创建的文件是Unicode(UTF-16LE)编码的,而Set-Content使用的是ANSI编码。
- 在Windows PowerShell 5.1或更高版本中,可以通过修改$PSDefaultParameterValues变量的值来设置Out-File / > / >>命令的默认编码为UTF-8。
- 在Windows PowerShell 5.0或更低版本中,无法更改> / >>命令的编码,但对于显式调用的Out-File命令,上述技术可以使用。
- 在Windows PowerShell 3.0或更高版本中,可以通过修改$PSDefaultParameterValues变量的值来设置所有支持-Encoding参数的命令的默认编码为UTF-8。
解决方法:
- 将以下命令添加到$PROFILE文件中,以使Out-File和Set-Content命令默认使用UTF-8编码:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8' $PSDefaultParameterValues['Set-Content:Encoding'] = 'utf8'
- 如果希望仅在当前会话中更改默认编码,可以使用以下命令:
$PSDefaultParameterValues = @{ 'Out-File:Encoding' = 'utf8'; 'Set-Content:Encoding' = 'utf8' }
- 对于所有支持-Encoding参数的命令,可以使用以下命令将默认编码设置为UTF-8:
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
- 将上述命令添加到$PROFILE文件中,可以使所有命令在默认情况下使用UTF-8编码,但如果命令显式指定了编码,则不会受到影响。
解决Windows PowerShell中出现无效字符的问题的方法是通过修改$PSDefaultParameterValues变量的值来设置Out-File和Set-Content命令的默认编码为UTF-8。可以将这些命令添加到$PROFILE文件中,以使其在默认情况下使用UTF-8编码,但如果命令显式指定了编码,则不会受到影响。