2016-03-08 40 views
2

我正在使用Invoke-RestMethod從我正在使用的應用程序中獲取頁面名稱。我注意到,當我做一個GET頁面上返回的頁面名稱,像這樣Powershell Invoke-RestMethod不正確的字符

此頁面中的工作

但是實際的頁面名稱是

此頁面 - 正在

這裏是我的要求看起來如何

Invoke-WebRequest -Uri ("https://contoso.com/rest/api/content/123789") -Method Get -Headers $Credentials -ContentType "application/json; charset=utf-8" 

問題在於短劃線,有誰知道我該如何解決這個問題?

回答

2

Invoke-restmethod或invoke-webrequest?

Invoke-RestMethod cmdlet對HttpWebResponse.CharacterSet屬性的結果使用默認解碼。

如果未設置,則默認使用默認的ISO-8859-1編碼(afaik)。

我假設你的服務器在響應頭文件中發送了一些錯誤的字符集(或者丟棄它),因此它錯誤地解碼了。

你知道在你的服務器的響應中發送了什麼字符集/編碼嗎?

如果您正在嘗試Invoke-webrequest;在回覆中檢查您的標題,例如

$r = invoke-webrequest http://foobar.com 
$r.Headers 

如果您正在處理編碼問題;例如你的服務器沒有發送正確的頭文件;你總是可以嘗試轉儲文件的響應,並用不同的編碼閱讀:

Invoke-WebRequest http://foorbar.com -outfile .\test.txt 
$content = get-content .\test.txt -Encoding utf8 -raw 

在這種情況下,你將不再與HTTP響應工作;但它可能會幫助您調試/查找您要查找的編碼問題。

+0

當我運行調用-WebRequest的HTTP:// foorbar。 com -outfile。\ test.txt我看到了正確的字符,但是如果我在沒有outfile的情況下運行相同的命令,則字符不正確。 – JoeRod

5

在調用-的WebRequest的情況下,不檢測性反應的編碼正確的,你可以使用RawContentStream並將其轉換爲所需要的編碼:

$resp = Invoke-WebRequest -Uri ... $html=[system.Text.Encoding]::UTF8.GetString($resp.RawContentStream.ToArray());