echo "string"> file в Windows PowerShell добавляет непечатный символ в файл - PullRequest
4 голосов
/ 17 ноября 2011

В 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 ]

9 голосов
/ 17 ноября 2011

Попробуйте echo "string" | out-file -encoding ASCII file.txt, чтобы получить простой текстовый файл в кодировке ASCII.

Сравнение полученных файлов:

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

создаст файл со следующим содержимым:

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

1012 * однако *

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 пары байтов. -127 символов ASCII

4 голосов
/ 18 ноября 2011

Эти две команды эквивалентны тем, что обе они по умолчанию используют кодировку 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?

Использовать чистый и простой Get-HexDump функция доступна на PowerShell.com.Имея это в виду, вы можете проверять свои сгенерированные файлы с помощью всего лишь:

Get-HexDump file.txt

Для чего-либо нетривиального, вы можете указать, сколько столбцов ширины вы хотите выводить и сколько байтов файла обрабатывать с чем-токак это:

Get-HexDump file.txt -width 15 -bytes 150
0 голосов
/ 29 января 2013

PowerShell создает файлы Unicode UTF-16 с меткой порядка байтов (BOM).

Dos2unix 6.0 и выше может считывать файлы UTF-16 и преобразовывать их в UTF-8 (кодировка Cygwin по умолчанию) и удалятьспецификацияВерсии до 6.0 будут видеть файлы UTF-16 как двоичные и пропускать их, как в вашем примере.

...