Erwin | 11 Jun 11:26 2012
Picon

[Rails 3.2] REXML::ParseException ... invalid byte sequence in UTF-8

when parsing an xml response  ( UTF-8 encoding) I get a parsing error

response =>
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss xmlns:opensearch=
\"http://a9.com/-/spec/opensearch/1.1/\" xmlns:dc=\"http://purl.org/dc/
elements/1.1/\" version=\"2.0\">\n  <channel>\n    <title>link:http://
lvh.me:3000 - Google Recherche de blogs</title>\n    <link>http://
www.google.com/search?q=link:http://lvh.me:3000&amp;tbm=blg</link>\n
<description>Aucun document ne correspond aux termes de recherche sp
\xE9cifi\xE9s (&lt;b&gt;link:http://lvh.me:3000&lt;/b&gt;).</
description>\n    <opensearch:totalResults>0</opensearch:totalResults>
\n    <opensearch:startIndex>1</opensearch:startIndex>\n
<opensearch:itemsPerPage>10</opensearch:itemsPerPage>\n  </channel>\n</
rss>"

parse_rss(response)

 def parse_rss(body)
      xml = REXML::Document.new(body)
REXML::ParseException Exception: #<REXML::ParseException:
#<ArgumentError: invalid byte sequence in UTF-8>

which seems to be raised  by the  <description> tag with a french text
using accentuated characters... like    sp\xE9cifi\xE9s

is it an REXML bug ? ( in this case I may switch to Nokogiri...)
 or did I missed any mandatory parameter in my request ?

thanks for your feedback

(Continue reading)

Erwin | 11 Jun 11:54 2012
Picon

Re: REXML::ParseException ... invalid byte sequence in UTF-8

[SOLVED]  found the answer here :
http://yehudakatz.com/2010/05/05/ruby-1-9-encodings-a-primer-and-the-solution-for-rails/
.. I forgot to mention I am using Ruby 1.9.3 .....

so

 xml =
REXML::Document.new(body.force_encoding("ISO-8859-1").encode("UTF-8"))

is the right way to handle the response

On Jun 11, 11:26 am, Erwin <yves_duf...@...> wrote:
> when parsing an xml response  ( UTF-8 encoding) I get a parsing error
>
> response =>
> "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss xmlns:opensearch=
> \"http://a9.com/-/spec/opensearch/1.1/\" xmlns:dc=\"http://purl.org/dc/
> elements/1.1/\" version=\"2.0\">\n  <channel>\n    <title>link:http://
> lvh.me:3000 - Google Recherche de blogs</title>\n    <link>http://www.google.com/search?q=link:http://lvh.me:3000&tbm=blg</link>\n
> <description>Aucun document ne correspond aux termes de recherche sp
> \xE9cifi\xE9s (&lt;b&gt;link:http://lvh.me:3000</b>).</
> description>\n    <opensearch:totalResults>0</opensearch:totalResults>
> \n    <opensearch:startIndex>1</opensearch:startIndex>\n
> <opensearch:itemsPerPage>10</opensearch:itemsPerPage>\n  </channel>\n</
> rss>"
>
> parse_rss(response)
>
>  def parse_rss(body)
>       xml = REXML::Document.new(body)
(Continue reading)


Gmane