Powershell 2.0在字符之间生成空值

cvs*_*ave 14 null powershell-2.0

使用PowerShell 2.0:

write-output "abcd" >> mytext.txt  
Run Code Online (Sandbox Code Playgroud)

收益:

n n b nul c nul d nul

od -c将nul显示为真正的二进制零\0,或:( a \0 b \0 c \0 d \0\r \0 \n \0).

我试图生成一些SQL,所以我不认为这样做.有关正在发生什么的想法以及如何使用write-output来获取指定的字符?

dri*_*iis 20

这是因为写入输出默认为UTF-16文本编码,即每个字符2个字节.当您处理适合ASCII代码页范围的文本时,每个字符的第二个字节将为零.

这由$OutputEncoding全局变量控制,因此您可以将其设置为ASCII.

另一个选项是使用cmdlet Out-File,它具有显式编码参数.我建议你使用它而不是输出重定向,因为这样可以避免全局更改环境(通过设置全局首选项变量$OutputEncoding)

使用Out-File,并将编码设置为ASCII,您的示例如下所示:

"abcd" | out-file "mytext.txt" -Encoding ASCII
Run Code Online (Sandbox Code Playgroud)

请注意,并非所有字符都可以用ASCII表示,您应该确定这是否适合您的目的编码.我个人通常会选择UTF-8,因为当字符落在0-127的ASCII范围内时,它是ASCII等效的,但也处理国际字符.关于文本编码的强制性链接.