echo“string”> Windows PowerShell中的文件将不可打印的字符附加到该文件

时间:2011-11-17 08:11:39

标签: powershell cygwin dos2unix

在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回应的,无法更改。

3 个答案:

答案 0 :(得分:9)

尝试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 00 xx 00 xx 00表示正常0 -127个ASCII字符

答案 1 :(得分:4)

这两个命令是等效的,因为默认情况下它们都使用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-HexDump功能。 有了这些,您只需使用以下内容检查生成的文件:

Get-HexDump file.txt

对于任何非常重要的事情,您可以指定要输出的列宽度以及要处理的文件的字节数:

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

答案 2 :(得分:0)

PowerShell使用字节顺序标记(BOM)创建Unicode UTF-16文件。

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