$doc = invoke-webrequest "http://www.nmc.cn/" $doc.parsedhtml.title
返回是乱码, 请问怎样在读取的时候转码?
———–update————-
后来用HtmlAgilityPack这么做的:
add-type -Path "C:\tools\HtmlAgilityPack.1.4.6\Net40\HtmlAgilityPack.dll" $doc = New-Object HtmlAgilityPack.HtmlDocument $doc.LoadHtml([string](get-content "C:\nmc.data" -encoding utf8)) $text = $doc.GetElementbyId("someid") $text.InnerHtml
0 Answers
中央气象台网站的内容为UTF-8这种编码:
<meta http-equiv=”Content-Type” content=”text/html;charset=UTF-8″>
所以需要读取内容时,指定编码。
但是Invoke-WebRequest命令有一个bug,暂时不支持指定网站内容的编码。
因此我们可以换一种思路,讲网站流写入文件,然后再从本地文件读出来,这是就可以控制编码了。
Invoke-WebRequest http://www.nmc.cn/ -OutFile nmc.data
Get-Content .\nmc.data -Encoding UTF8
这是不得已而为之的办法,否则你可能得自己通过http request 类去实现了。
嗯, 这种Get-Content之后变成了string, 失去了dom操作的特性(原本返回的是HtmlWebResponseObject). 后来我的思路跟你说的类似, 改用HtmlAgilityPack读取本地的临时data文件(转UTF8之后), 然后再操作dom