Powershell Invoke-RestMethod字符不正确

时间:2016-03-08 03:40:03

标签: powershell webrequest non-ascii-characters

我正在使用Invoke-RestMethod从我正在使用的应用程序中获取页面名称。我注意到当我在页面上执行GET时,它返回页面名称,如此

  

此页面正在运作

但实际的页面名称是

  

此页面正在运作

以下是我的请求的外观

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

问题出在en-dash上,是否有人知道如何解决这个问题?

3 个答案:

答案 0 :(得分:8)

如果Invoke-WebRequest没有检测到右侧的响应编码,您可以使用 RawContentStream 并将其转换为所需的编码:

store.pages.products

答案 1 :(得分:3)

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响应;但它可能会帮助您调试/找到您要查找的编码问题。

答案 2 :(得分:0)

一行解决方案(没有文件):

[system.Text.Encoding]::UTF8.GetString((Invoke-WebRequest "https://www.solution.com").RawContentStream.ToArray())
相关问题