powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / PowerShell - работа с кодировкой
5 сообщений из 5, страница 1 из 1
PowerShell - работа с кодировкой
    #40039844
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Вопрос по Windows PowerShell - предположу что это близко к .Net :)

На моем локальном компьютере
Код: powershell
1.
2.
$Default = [System.Text.Encoding]::Default
echo "Default: $Default"


Выдает: System.Text.SBCSCodePageEncoding

Код: powershell
1.
2.
3.
4.
$JiraResolvedIssueStatusName = [System.Web.HttpUtility]::UrlEncode("Решен", [System.Text.Encoding]::Default)
echo "JiraResolvedIssueStatusName=$JiraResolvedIssueStatusName"
$JiraResolvedIssueStatusName = [System.Web.HttpUtility]::UrlEncode("Решен", [System.Text.Encoding]::GetEncoding("utf-8"))
echo "JiraResolvedIssueStatusName=$JiraResolvedIssueStatusName"


Выдает:
JiraResolvedIssueStatusName=%d0%e5%f8%e5%ed
JiraResolvedIssueStatusName=%d0%a0%d0%b5%d1%88%d0%b5%d0%bd

Сервер Bamboo запускает Windows PowerShell на удаленной машине.
Результаты выполнения следующие:

System.Text.SBCSCodePageEncoding
JiraResolvedIssueStatusName=%d0%a0%d0%b5%d1%88%d0%b5%d0%bd
JiraResolvedIssueStatusName=%d0%a0%c2%a0%d0%a0%c2%b5%d0%a1%e2%82%ac%d0%a0%c2%b5%d0%a0%d0%85

Что мне нужно сделать на своей локальной машине, что бы результат совпадал с результатом удаленного сервера?

С Уважением,
Александр.
...
Рейтинг: 0 / 0
PowerShell - работа с кодировкой
    #40040012
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Lisichkin
Код: powershell
1.
$JiraResolvedIssueStatusName = [System.Web.HttpUtility]::UrlEncode("Решен", [System.Text.Encoding]::GetEncoding("utf-8"))



Кроме UTF-8 есть много других забавных кодировок

windows-1251
cp866

Проверьте работу с ними
...
Рейтинг: 0 / 0
PowerShell - работа с кодировкой
    #40040016
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ж литерал внутри файла скрипта. Нужно смотреть, в какой кодировке сам скрипт сохранен.
Но лучше так не делать, я думаю, если очень нужно литерал запихать в скрипт, то лучше его заэнкодить сразу. А с переменными такого эффекта, понятное дело, не будет.
...
Рейтинг: 0 / 0
PowerShell - работа с кодировкой
    #40040066
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Вы правы. Я не ожидал такого подвоха от скриптовых языков.
Следующий код, определяющий кодировку исполняемого скрипта:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
<# Get file encoding #>
function Get-FileEncoding {
  [CmdletBinding()]
  param (
      [Alias("PSPath")]
      [Parameter(Mandatory = $True, ValueFromPipelineByPropertyName = $True)]
      [String]$Path,
      [Parameter(Mandatory = $False)]
      [System.Text.Encoding]$DefaultEncoding = [System.Text.Encoding]::Default
  )

  process {
      [Byte[]]$bom = Get-Content -Encoding Byte -ReadCount 4 -TotalCount 4 -Path $Path
      $encoding_found = $false

      foreach ($encoding in [System.Text.Encoding]::GetEncodings().GetEncoding()) {
          $preamble = $encoding.GetPreamble()
          if ($preamble) {
              foreach ($i in 0..$preamble.Length) {
                  if ($preamble[$i] -ne $bom[$i]) {
                      break
                  } elseif ($i -eq $preable.Length) {
                      $encoding_found = $encoding
                  }
              }
          }
      }

      if (!$encoding_found) {
          $encoding_found = $DefaultEncoding
      }

      $encoding_found
  }
}

  $SelfEncoding = Get-FileEncoding $PSCommandPath
  echo "SelfEncoding=$SelfEncoding"



Возвращает:
Local: System.Text.UTF8Encoding
Bamboo: System.Text.SBCSCodePageEncoding (Win 1251)

Т.е. Bamboo создает агента в виртуальной Win OS и на нем файл скрипта в кодировке Win1251.
Мое решение - использовать переменную $SelfEncoding, содержащую кодировку текущего исполняемого скрипта.

Shocker.Pro Но лучше так не делать, я думаю, если очень нужно литерал запихать в скрипт, то лучше его заэнкодить сразу - Не совсем понятно как это делать?
...
Рейтинг: 0 / 0
PowerShell - работа с кодировкой
    #40040080
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lisichkin
Не совсем понятно как это делать?
вместо
Код: powershell
1.
$JiraResolvedIssueStatusName = [System.Web.HttpUtility]::UrlEncode("Решен", [System.Text.Encoding]::Default)

напиши
Код: powershell
1.
$JiraResolvedIssueStatusName = "%d0%e5%f8%e5%ed"
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / PowerShell - работа с кодировкой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]