Nic*_*las 3 html ruby encoding utf-8 nokogiri
我对编程非常陌生,我正在Ruby 1.9.3中编写一个小练习程序,使用Nokogiri用邮政编码查询加拿大议会网站,然后打印相应的国会议员的名字和他们的骑马.终奌站.
我的代码获取页面并隔离MP的名称/骑行很好,但在shell中将UTF-8字符显示为纯ASCII.我想要显示UTF-8字符.
我知道shell可以处理UTF-8,因为:
irb> riding = "St-Jérôme"
=> "St-Jérôme"
irb> puts riding
St-Jérôme
=> nil
Run Code Online (Sandbox Code Playgroud)
我用来获取页面的代码:
page = Nokogiri::HTML(open("http://parl.gc.ca/ParlInfo/Compilations/HouseOfCommons/MemberByPostalCode.aspx?PostalCode=#{postalcode}"))
Run Code Online (Sandbox Code Playgroud)
这是我输入时此代码返回的示例puts page:
<span id="ctl00_cphContent_repMP_ctl00_grdConstituencyAddress_ctl02_Label12">St-Jérôme</span>
Run Code Online (Sandbox Code Playgroud)
所以" St-Jérôme" St-Jérôme在页面输出中变成" ",或者St-Jérôme在终端中变成" " .
也许有一种方法来转换它,因为它存储为字符串变量?或者也许我可以在Nokogiri中设置一个选项,将其作为UTF-8而不是ASCII来降低?
我搜索了很长时间才在Google和Stack Overflow上找到答案,并且没有发现任何相关或我理解的内容; 再说一次,我对此非常陌生.如果这是重复,请指出我正确的方向.
非常感谢.
尝试
page = Nokogiri::HTML(open("http://parl.gc.ca/ParlInfo/Compilations/HouseOfCommons/MemberByPostalCode.aspx?PostalCode=#{postalcode}"), nil, "UTF-8")
Run Code Online (Sandbox Code Playgroud)
代替.这应该将页面解析为UTF-8并解决问题.