Windows PowerShell 中的 echo "string" > 文件将不可打印字符追加到该文件



在Windows PowerShell中:

echo "string" > file.txt

在Cygwin中:

$ cat file.txt
:::s t r i n g
$ dos2unix file.txt
dos2unix: Skipping binary file file.txt

我想要一个简单的"字符串"在文件中。我该怎么做?也就是说,当我说cat file.txt时,我只需要"字符串"作为输出。我正在从Windows PowerShell回显,这一点无法更改。

尝试echo "string" | out-file -encoding ASCII file.txt以获得一个简单的ASCII编码的txt文件。

生成文件的比较:

echo "string" | out-file -encoding ASCII file.txt

将生成一个包含以下内容的文件:

73 74 72 69 6E 67 0D 0A (string..)

然而

echo "string" > file.txt

将生成一个包含以下内容的文件:

FF FE 73 00 74 00 72 00 69 00 6E 00 67 00 0D 00 0A 00 (ÿþs.t.r.i.n.g.....)

(字节顺序标记FF FE表示文件为UTF-16(LE(。UTF-16(LE(的签名=2个字节:0xFF 0xFE,后跟2个字节对。xx 00xx 00xx 00用于标准0-127 ASCII字符

这两个命令是等效的,因为它们都默认使用UTF-16编码:

echo "string" > file.txt
echo "string" | out-file file.txt

您可以将显式编码参数添加到后一种形式(如jon Z所示(,以生成纯ASCII:

echo "string" | out-file -encoding ASCII file.txt

或者,您可以使用set-content,默认情况下使用ASCII编码:

echo "string" | set-content file.txt

推论1:

想在一行中将unicode文件转换为ASCII吗

只需使用这个:

get-content your_unicode_file | set-content your_ascii_file

可以缩写为:

gc your_unicode_file | sc your_ascii_file

推论2:

想得到一个十六进制转储,这样你就可以真正了解什么是unicode,什么是ASCII

使用PowerShell.com上提供的干净简单的Get-HexeDump功能。有了这个,你只需:就可以检查你生成的文件

Get-HexDump file.txt

对于任何非琐碎的事情,您可以指定您想要输出的列宽,以及使用以下内容处理文件的字节数:

Get-HexDump file.txt -width 15 -bytes 150

PowerShell创建带有字节顺序标记(BOM(的Unicode UTF-16文件。

Dos2unix 6.0及更高版本可以读取UTF-16文件并将其转换为UTF-8(默认的Cygwin编码(并删除BOM。6.0之前的版本会将UTF-16文件视为二进制文件,并跳过它们,如您的示例所示。

相关内容

  • 没有找到相关文章

最新更新