求助 我用Invoke-WebRequest请求一个中文网站返回是乱码


PowerShell交流中心分类: Powershell基础求助 我用Invoke-WebRequest请求一个中文网站返回是乱码
1
northman asked 8年 ago
 $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
1
Mooser Lee 管理员 answered 8年 ago

中央气象台网站的内容为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 类去实现了。

northman replied 8年 ago

嗯, 这种Get-Content之后变成了string, 失去了dom操作的特性(原本返回的是HtmlWebResponseObject). 后来我的思路跟你说的类似, 改用HtmlAgilityPack读取本地的临时data文件(转UTF8之后), 然后再操作dom