使用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来获取指定的字符?
答案 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