2013-08-25 28 views
0

我试图创建一段代码,它将从互联网上下载一个页面并对其进行一些操作。该页面使用iso-8859-1编码。Ruby 1.9 iso-8859-8-i编码

我无法找到处理此文件的方法。我需要在希伯来文中搜索文件并将更改后的文件返回给用户。

我试图使用string.encode,但我仍然得到错误的编码。

打印响应编码时,我得到:"encoding":{}喜欢它的不确定,这是什么,它返回一个例子:

\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd \ufffd\ufffd-\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd \ufffd\ufffd\ufffd\ufffd       

它应该是希伯来字母。

当我用final.body.encode('iso-8859-8-i')尝试时,出现错误code converter not found (ASCII-8BIT to iso-8859-8-i)

+1

编码问题可能是许多不同的事情。您能否添加一些更具体的细节,以及非工作代码的精确步骤和示例(简化来显示您的编码问题)?显然它取决于输入文件,所以只需显示加载文件的位置以及在该阶段输出的是什么'p file_contents.encoding'。 –

+0

增加了更多信息 –

回答

1

当您输入Ruby或OS错误地分配编码的地方时,转换将不起作用。这是因为Ruby将从错误的假设开始,并尝试在转换时保留错误的字符。

但是,如果您从其他来源获知正确的编码是什么,您可以使用force_encoding方法告诉Ruby如何解释它加载到String的字节。注意这改变了对象。

E.g.

contents = final.body 
contents.force_encoding('ISO-8859-8') 
puts contents 

在这一点上(前提是它的工作原理),你现在可以做转换(例如以UTF-8),因为Ruby已经正确地告诉它在处理什么字。

我在我的Ruby版本上找不到'ISO-8859-8-I'。我不确定'ISO-8859-8'与您需要的距离有多接近(如果...-I编码不可用,某些Google搜索表明它可能对您有用)。

+1

你能告诉我什么时候这个方法[**'default_external ='**](http://www.ruby-doc.org/core-2.0/Encoding.html#method-c-default_external-3D )然后用? –

+0

@Babai:好问题。这可能是适当的(尽管由于全局性的变化,您链接的文档表明这不会在Ruby代码中调用)。可能最好的是在开源时首先设置编码,但OP没有显示用于此的方法,所以我的回答是基于我在问题中可以看到的补丁。另外,这可能是因为编码没有通过HTTP头发送(因为它应该是这样),所以OP别无选择,只能以某种方式强制选择编码。 –

+0

Humm ..我woun't评论对你的答案..我只是检查,如果这种方法也可以有所帮助..这就是它冷却:) –