Кодировка ISO-8859-15 PowerShell - PullRequest
       21

Кодировка ISO-8859-15 PowerShell

0 голосов
/ 08 октября 2019

Мне нужно отправить SMS из скрипта powerShell (используя smsmode api). Моя проблема заключается в том, что кодировка моего сообщения должна быть в "ISO-8859-15", и даже если кодирование работает в консоли, когда я получаю смс, кодировка неверна.

Это коддо сих пор, чтобы попытаться кодировать, но я даже не уверен, что он работает должным образом. Это точно влияет на вывод в консоли.

        $encoded = [System.Text.Encoding]::GetEncoding('iso-8859-15')
        $stringEncoded = $encoded.GetBytes($messageToSend) 
        $result = [System.Text.Encoding]::Default.GetString($stringEncoded)

         $postParam = @{
            accessToken = $smsToken
            numero      = $receivingNumber
            message     = $result
            nbr_msg     = 1 
         }
 $reponse = Invoke-RestMethod -Method Post -Uri $resourceToSendSMS -Body $postParam

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

Спасибо!

1 Ответ

0 голосов
/ 08 октября 2019

Вы можете сделать что-то вроде следующего:

$dstEncoding = [System.Text.Encoding]::GetEncoding('iso-8859-15')
$srcEncoding = [System.Text.Encoding]::Default
$result = $dstEncoding.GetString([System.Text.Encoding]::Convert($srcEncoding,$dstEncoding,$srcEncoding.GetBytes($messageToSend)))

Вы в основном конвертируете байты текущих закодированных символов в кодировку назначения. Наконец, вам нужно получить строку преобразованных байтов.

Проблема в том, что если кодировка по умолчанию не поддерживает все символы, уже содержащиеся в $messageToSend, даже если кодировка будет правильной, данные выиграютне бытьТак что это зависит от того, как $messageToSend был создан.

[System.Text.Encoding]::Default - кодировка активной кодовой страницы. Это может варьироваться в разных системах.

...