0

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

谢谢

4

2 回答 2

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ím nezadaný kraj”、“181”]

如果您示例的输出来自控制台,那么这是因为控制台输出使用 utf-8 编码而不是您的源站点的编码(并且可能解析工作正常,直到它显示)

于 2013-09-12T10:08:02.753 回答
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
于 2013-09-12T10:26:56.897 回答