У меня есть сценарий PS для копирования относительных путей всех файлов в папке в текстовый файл.
Перенаправление вывода Powershell Кодирование Выпуск
(gci -path Passion_Flower_positive_images -recurse *.jpg|Resolve-path -relative) -replace "\\","/" -replace "[.]/","" > Passion_Flower_positive_images_txt.txt
После выполнения этой команды я проверил выход, это казалось нормальным. Итак, я продолжил процедуру, которая взяла этот файл в качестве входных данных. Как только я запустил процедуру в cmd, она отобразила некоторые «странные» символы, что привело к полному сбою и неопределенному поведению.
Мне потребовалось много времени, чтобы понять это. Я запускал вручную ту же самую процедуру, используя unix-импорт find.exe и заменяя все символы-разделители пути от '\' до '/' и EOL до CR-LF-истощал немного, но он работал в прошлом.
Теперь, я взял вывод команды GCI (который не работал) и сделал «Advanced сохранить параметры» в VS2013, чтобы изменить кодировку (который я нашел, чтобы быть Unicode) из Unicode в евроокон -1252. Теперь я подал один и тот же файл на процедуру, и он сработал!
Я искал различные решения по умолчанию для кодировки Ascii. Я прочитал одно решение и сделал это:
(gci -path Passion_Flower_positive_images -recurse *.jpg|Resolve-path -relative) -replace "\\","/" -replace "[.]/","" | out-file -path Passion_Flower_positive_images_txt.txt -encoding ascii
Но в конечном итоге в какой-то ошибки, которые я не мог видеть, как она вышла.
Тогда я напечатал следующее:
PS C:\> $OutputEncoding
я получил:
PS F: _102flowers-500x500> $ OutputEncoding
IsSingleByte : True
BodyName : IBM437
EncodingName : OEM United States
HeaderName : IBM437
WebName : IBM437
WindowsCodePage : 1252
IsBrowserDisplay : False
IsBrowserSave : False
IsMailNewsDisplay : False
IsMailNewsSave : False
EncoderFallback : System.Text.InternalEncoderBestFitFallback
DecoderFallback : System.Text.InternalDecoderBestFitFallback
IsReadOnly : True
CodePage : 437
Это, однако, заставляет меня задаться вопросом, если кодировка по умолчанию, указанная здесь WindowsCodePage : 1252
действительно, почему ручное изменение работает и действительно ли нужно изменить кодировку? Как мне это достичь?
Вместо использования 'Out-File' вы также можете использовать' Set-Content', который по умолчанию соответствует ascii. – Matt
@Matt: Lemme попробуйте это. –
Это также зависит от программы вывода, ожидающей кодирования ascii. – Matt