编码ISO-8859-15 powershell

时间:2019-10-08 14:21:05

标签: powershell character-encoding 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 :(得分:0)

您可以执行以下操作:

$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是活动代码页的编码。在不同的系统上可能会有所不同。