Кодирование значения трубопровода в команду - PullRequest
0 голосов
/ 31 августа 2018

У меня есть голова, и я не уверен, как решить эту проблему. Я ищу просвещенного человека, который бы знал, что это такое.

Давайте начнем с центральной части этого запроса, этого простого фрагмента кода.

Function New-Thingy {
    [CmdletBinding()]
    Param(
        [Parameter(ValueFromPipeline = $true)]$testing
    )
  # Tried playiing with encoding but it didn't do anything.
  #  $Encoding = [System.Text.Encoding]::Default
  #  [Console]::OutputEncoding = $Encoding
  #  [Console]::InputEncoding = $Encoding

      Write-Host $testing
}

'options — test' | New-Thingy

Обратите внимание, что проблема не возникает в Powershell ISE, но возникает в VSCODE и Powershell (путем вызова сценария ps1, содержащего этот код).

Как из кода VS, так и из Powershell, запуск сценария дает следующий вывод: параметры - тест вместо

Вывод должен быть: Опции - тест

Использование F8 в этой строке кода впоследствии приводит к правильному выводу, но выполнение F5 всегда выдает неправильную кодовую страницу.

Кроме того, использование расширяемой строки вместо одинарных кавычек приводит к появлению следующего сообщения об ошибке:

+ "options — test" | New-Thingy
+                  ~~~~~~~~~~~~~~
The string is missing the terminator: ".
  • Как получить правильный вывод? Я попытался изменить кодировку ввода / вывода консоли, но она ничего не меняет
  • Что происходит с расширяемой строкой и есть ли способ предотвратить это?

Опять же, Powershell ISE выполняет работу правильно, выдает правильный вывод и не выдает никаких ошибок при использовании расширяемой строки.

Обычная консоль PowerShell делает и код VS тоже.

Я продолжаю искать ответ, но я должен быть администратором. Я немного растерялся здесь.

1 Ответ

0 голосов
/ 31 августа 2018

В вашем коде вы используете длинную черту (). В Windows PowerShell, если ваш сценарий не сохранен как utf8 с bom, он анализирует его как кодировку «ANSI», для которой этот символ выходит за пределы диапазона, так как он занимает более 1 байта, как вы можете видеть по неверному представлению глифа. Это исправлено в PowerShell Core, где по умолчанию используется разбор кодировки utf8 (по сравнению с ANSI).

Сохранение ваших сценариев Windows PowerShell как utf8bom в будущем исправит эту «ошибку».

В VSCode settings.json с powershell расширением:

"[powershell]": {
    "files.encoding": "utf8bom"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...