我正在使用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上,是否有人知道如何解决这个问题?
答案 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())