使用 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 默认为 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 .
关于null - Powershell 2.0 在字符之间生成空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3806305/