Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 调用Webrequest响应的编码_Powershell - Fatal编程技术网

Powershell 调用Webrequest响应的编码

Powershell 调用Webrequest响应的编码,powershell,Powershell,在对某些带有非英语字符的web使用cmdlet InvokeWebRequest时,我看不到任何定义响应/页面内容编码的方法 我用简单的方法,那些艺术家的名字都被破坏了。您可以使用以下简单的行进行尝试: Invoke-WebRequest http://colours.cz/ucinkujici 这是由cmdlet的设计引起的吗? 我可以指定编码位置吗? 是否有任何方法可以正确解析响应?在我看来,您是正确的:/ 下面是一种获得正确内容的方法,首先将响应保存到一个文件,然后用正确的编码将其读入一

在对某些带有非英语字符的web使用cmdlet InvokeWebRequest时,我看不到任何定义响应/页面内容编码的方法

我用简单的方法,那些艺术家的名字都被破坏了。您可以使用以下简单的行进行尝试:

Invoke-WebRequest http://colours.cz/ucinkujici
这是由cmdlet的设计引起的吗? 我可以指定编码位置吗?
是否有任何方法可以正确解析响应?

在我看来,您是正确的:/

下面是一种获得正确内容的方法,首先将响应保存到一个文件,然后用正确的编码将其读入一个变量。但是,您不是在处理
HtmlWebResponseObject

Invoke-WebRequest http://colours.cz/ucinkujici -outfile .\colours.cz.txt
$content = gc .\colours.cz.txt -Encoding utf8 -raw
这会让你走得同样远:

[net.httpwebrequest]$httpwebrequest = [net.webrequest]::create('http://colours.cz/ucinkujici/')
[net.httpWebResponse]$httpwebresponse = $httpwebrequest.getResponse()
$reader = new-object IO.StreamReader($httpwebresponse.getResponseStream())
$content = $reader.ReadToEnd()
$reader.Close()
如果您真的想要这样一个
HtmlWebResponseObject
,这里有一种方法可以通过
Invoke WebRequest
$bad
$better
)从
ParsedHtml
中获得或多或少“可读”的内容:


更新:这是一个新的观点,知道您想要使用
ParsedHtml

一旦您有了内容(请参阅第一个两行代码段,其中1)将响应保存到文件,然后2)“读取”具有正确编码的文件内容),您可以执行以下操作:

$ParsedHtml = New-Object -com "HTMLFILE"
$ParsedHtml.IHTMLDocument2_write($content)
$ParsedHtml.Close()

Et voilá:]例如,
$ParsedHtml.title
现在显示正确,猜测其余部分也可以……

您不需要解决文件问题,只需正确使用响应对象即可:

$response = Invoke-WebRequest http://colours.cz/ucinkujici

$encodedString = $response.Content

我花了一些时间才弄清楚,因为很多人都在抱怨Invoke WebRequest中存在错误。

您是否在powershell.exe控制台中显示结果?您的字体可能不支持字符。我正在使用powershell ISE v3。我想说这不是问题所在,因为我在powershell ISE或console中的语言没有其他问题……我尝试了第一个示例,它很有效。但坏消息是,我已经针对HtmlWebResponseObject的parsedHTML属性编写了所有代码。因此,我尝试了第三个示例(这将拯救我),但不幸的是,
对我不起作用。它从原始Sigur Rós(在
$bad`)中为我提供了Sigur Ra3(在$better
中)。我使用了您的更新部分,它与我的旧代码一起工作。非常感谢,这正是我需要的。
$response = Invoke-WebRequest http://colours.cz/ucinkujici

$encodedString = $response.Content