在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文件视为二进制文件,并跳过它们,如您的示例所示。