Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Encoding::UndefinedConversionError

I keep getting an Encoding::UndefinedConversionError - "\xC2" from ASCII-8BIT to UTF-8 every time I try to convert a hash into a JSON string. I tried with [.encode | .force_encoding](["UTF-8" | "ASCII-8BIT" ]), chaining .encode with .force_encoding, backwards, switching parameters but nothing seemed to work so I caught the error like this:

begin   menu.to_json rescue Encoding::UndefinedConversionError   puts $!.error_char.dump   p $!.error_char.encoding end 

Where menu is a sequel's dataset.to_hash with content from a MySQL DB, utf8_general_ci encoding and returned this:

"\xC2"

<#Encoding:ASCII-8BIT>

The encoding never changes, no matter what .encode/.force_encoding I use. I've even tried to replace the string .gsub!(/\\\xC2/) without luck.

Any ideas?

like image 375
martriay Avatar asked Oct 21 '12 23:10

martriay


1 Answers

menu.to_s.encode('UTF-8', invalid: :replace, undef: :replace, replace: '?') 

This worked perfectly, I had to replace some extra characters but there are no more errors.

like image 55
martriay Avatar answered Sep 21 '22 19:09

martriay