Powershell 2.0在字符之间生成空值

时间:2010-09-27 17:32:54

标签: null powershell-v2.0

使用powershell 2.0:

write-output "abcd" >> mytext.txt  

返回:

  

a nul 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来获取指定的字符?

2 个答案:

答案 0 :(得分:18)

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

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

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

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

"abcd" | out-file "mytext.txt" -Encoding ASCII

请注意,并非所有字符都可以用ASCII表示,您应该确定这是否适合您的目的编码。我个人通常会选择UTF-8,因为当字符落在0-127的ASCII范围内时,它是ASCII等效的,但也处理国际字符。 Obligatory link about text encoding

答案 1 :(得分:3)

默认情况下,Powershell以16位unicode工作,但是您正在读取该文件可能是8位格式。您可以解释可以读取UTF16的应用程序中的sql,或者因为>>是out-file cmdlet的语法糖,您可以执行以下操作:

write-output "abcd" | out-file -path mytext.txt -Encoding "UTF8" -Append