我正在尝试使用charset windows-1250从站点获取数据 我有这段代码:
require 'open-uri'
p open('http://www.ceskybenzin.cz/mapa/0').read.force_encoding('Windows-1250').encode('UTF-8').scan /addMarker\( point, '(.*?) - (.*?) - (.*?) - (.*?)', 'green', (.*?), bublina, 0 \);/
我得到的数据如下:
["EuroOil", "Prun\u00E9\u0159ov ", "U\u0161\u00E1k", "Zat\u00EDm nezadan\u00FD kraj", "181"]
有人可以告诉我如何从windows-1250网站正确获取数据
谢谢
答案 0 :(得分:1)
你的数据中有unicode-8符号而不是win-1250。
将您当前的示例字符串转换为正确的文本,您可以执行此操作
data = ["EuroOil", "Prun\u00E9\u0159ov ", "U\u0161\u00E1k", "Zat\u00EDm nezadan\u00FD kraj", "181"]
data.select{|snippet| snippet.encode("UTF-8")}
=> [“EuroOil”,“Prunéřov”,“Ušák”,“Zatímnezadanýkraj”,“181”]
如果你输出的例子是来自控制台,那么这是因为控制台输出的utf-8编码不是源网站的编码(并且可能解析工作正常直到它显示)
答案 1 :(得分:1)
a[0] => ["Kont.cz (NOVA-KONT)", "Praha 4", "Opatovsk\xC3\xA1", "Hlavn\u00ED m\u011Bsto Praha", "1"]
a.last => ["EuroOil", "Prun\u00E9\u0159ov ", "U\u0161\u00E1k", "Zat\u00EDm nezadan\u00FD kraj", "181"]
a.last.select { |i| puts i.encode("utf-8") } => produces
EuroOil
Prunérov
Usák
Zatím nezadaný kraj
181