在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回应的,无法更改。
答案 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
想要在一行中将unicode文件转换为ASCII格式吗?
请使用:
get-content your_unicode_file | set-content your_ascii_file
可以缩写为:
gc your_unicode_file | sc your_ascii_file
想要获得十六进制转储,以便您真正看到什么是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文件视为二进制文件并跳过它们,如您的示例所示。