2016-03-21 3 views
0

Запуск этой команды:Windows Powershell Output to File. Странные персонажи

echo "foo" > test.txt 

я получаю странные результаты в test.txt. На самом деле я даже не могу скопировать содержимое непосредственно здесь в переполнение стека, но нужно показать шестнадцатеричный вывод файла. Который выглядит this-

ff fe 66 00 6f 00 6f 00 0d 00 0a 00 

Не уверен, что FF и FE являются, но, похоже, это также размещение NULL между каждым символом.

Могут ли любые люди Windows направлять меня в правильном направлении относительно того, почему это происходит и как я могу это разрешить? Я просто хочу, чтобы содержимое «foo» было помещено в этот файл без изменений.

ответ

4

0xFFFE является Unicode byte order mark для UTF-16 LE (маленький конец), который является обычным Windows Unicode.

Содержимое вашего файла - это двухбайтовая спецификация, 0x6600 («f»), 0x6f00 («o»), 0x6f00 («o»), 0x0d00 («r» или возврат каретки), 0x0a00 (" `п» или новая линия)

Try:

echo "foo" | Out-File -FilePath test.txt -Encoding utf8 
+0

А я вижу. Таким образом, это не нули, они просто дополнительная длина при условии, что она закодирована в 16 бит. Благодаря! –

+0

Да. Вы можете подтвердить, что происходит следующим образом: '[System.Text.Encoding] :: Unicode.GetString ([byte []] (0xff, 0xfe, 0x66,0x00,0x6f, 0x00,0x6f, 0x00,0x0d, 0x00 , 0x0a, 0x00)) '. –

+2

Также можно использовать 'Set-Content', который по умолчанию использует ASCII/ANSI/whatever. –