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

На моем локальном компьютере
Код: 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 - работа кодировкой
    #40039887
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lisichkin,


https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding.default?view=netframework-4.8

Encoding.Default Property

Namespace:
System.Text
Assembly:
mscorlib.dll

Gets the default encoding for this .NET implementation.

Remarks
Код: html
1.
2.
3.
4.
5.
6.
7.
 Warning
Different computers can use different encodings as the default, and the default encoding can change on a single computer.
 If you use the Default encoding to encode and decode data streamed between computers or retrieved at different times on the same computer, it may translate that data incorrectly.
 In addition, the encoding returned by the Default property uses best-fit fallback to map unsupported characters to characters supported by the code page.
 For these reasons, using the default encoding is not recommended.
 To ensure that encoded bytes are decoded properly, you should use a Unicode encoding, such as UTF8Encoding or UnicodeEncoding.
 You could also use a higher-level protocol to ensure that the same format is used for encoding and decoding.
...
Рейтинг: 0 / 0
PowerShell - работа кодировкой
    #40039959
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Становиться интересней.
У меня локально файл лежит в кодировке - UTF8.
На удаленном сервере Bamboo создает файл в виртуальной машине в ASCII

Код:
Код: 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.
39.
function Get-FileEncoding {
    [CmdletBinding()]
    param (
        [Alias("PSPath")]
        [Parameter(Mandatory = $True, ValueFromPipelineByPropertyName = $True)]
        [String]$Path,

        [Parameter(Mandatory = $False)]
        [System.Text.Encoding]$DefaultEncoding = [System.Text.Encoding]::ASCII
    )

    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.ASCIIEncoding
...
Рейтинг: 0 / 0
PowerShell - работа кодировкой
    #40039969
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lisichkin
У меня локально файл лежит в кодировке - UTF8.
На удаленном сервере Bamboo создает файл в виртуальной машине в ASCII
ASCII, внезапно, целиком и полностью помещается в UTF8. Более того, они побитово совпадают. Если, конечно, это действительно US-ASCII, а не странное восьмибитное нечто.
...
Рейтинг: 0 / 0
PowerShell - работа кодировкой
    #40039973
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переписал код так:

Код: 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.
39.
40.
41.
<# 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
  Add-Type -AssemblyName System.Web
  $JiraResolvedIssueStatusName=[System.Web.HttpUtility]::UrlEncode("Решен", $SelfEncoding)
  $JiraTestedIssueStatusName=[System.Web.HttpUtility]::UrlEncode("Оттестирован", $SelfEncoding)
  $JiraTestingIssueTypeName=[System.Web.HttpUtility]::UrlEncode("Тестирование", $SelfEncoding)



Локально работает. Надеюсь удаленно тоже
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Windows [игнор отключен] [закрыт для гостей] / PowerShell - работа кодировкой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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