Используйте Powershell для импорта веб-сайта с китайским доменом

Я пытаюсь использовать PowerShell для добавления веб-сайта из файла xml.

Когда я просто использую команду CMD

appcmd  add site /in < test.xml

Привязка веб-сайта 「測試.com.tw」и все будет хорошо.

Но когда я использую Powershell

Get-Content test.xml | appcmd add site /in 

Привязка будет 「???.com.tw」

Даже если я изменю chcp на 65001 или использую «-encoding utf8» при получении контента, но ничего не изменится и все равно не смогу исправить импорт сайта с китайским доменом.

Мой сервер 2008 R2 и Powershell 1.0

Кто-нибудь знает, как я могу это исправить?


person Iris Wang    schedule 16.09.2019    source источник


Ответы (1)


PowerShell использует $OutputEncoding переменная предпочтения для определения кодировки символов, используемой при отправке данных во внешние программы (например, appcmd) через конвейер (то, что внешняя программа получает через стандартный ввод, стандартный поток ввода). .

В Windows PowerShell $OutputEncoding по умолчанию имеет значение ASCII(!), что означает, что правильно отправляются только символы в 7-битном коде ASCII, а все символы за пределами этого диапазона заменяются буквальными ? символами.

Вы должны установить $OutputEncoding в соответствии с кодировкой, которую appcmd ожидает при чтении со стандартного ввода; согласно вашим отзывам, необходимо использовать UTF-8:

$OutputEncoding = [System.Text.Utf8Encoding]::new($false) # BOM-less UTF-8

Get-Content test.xml | appcmd add site /in 

# Consider restoring the previous $OutputEncoding value

Примечание. Вышеприведенное предполагает, что Get-Content правильно распознает кодировку test.xml при чтении из него; если нет, используйте его параметр -Encoding, чтобы явно указать кодировку файла.

Кроме того, когда PowerShell считывает выходные данные из внешних программ, именно кодировка, хранящаяся в [Console]::OutputEncoding, определяет способ декодирования вывода — см. этот ответ.

person mklement0    schedule 16.09.2019