Ruby windows-1250编码

时间:2013-09-12 09:43:49

标签: ruby encoding

我正在尝试使用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网站正确获取数据

谢谢

2 个答案:

答案 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