Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Encoding issues in javascript files using rails asset pipeline

I'm using rails 3.1 and the asset pipeline (ruby 1.9.2).

I get the following error when trying to serve a javascript js.erb file that has utf-8 encoded strings

invalid byte sequence in US-ASCII

I've set Encoding.default_external = "UTF-8" in my environment.rb file. How do i get the asset pipeline to serve with a different encoding?

EDIT

The error only shows up when I'm generating the utf-8 character outside of the file (in this case by querying from the DB). The error goes away if I add

<% "日" %>

to the top of the file. I'm guessing there's some kind of encoding guessing going on here, but how do I avoid it without that hacky solution?

like image 786
spike Avatar asked Oct 13 '11 23:10

spike


1 Answers

When loading a file, Ruby tries to "guess" its encoding. If no UTF-8 or any other non-ASCII characters are found, it uses US-ASCII as encoding for the file and throws an error if it suddenly encounters a non-ASCII character, which e.g. is loaded at run-time.

The best solution for this problem is to force Ruby to use a certain encoding by adding # encoding: utf-8 as the first line of a .rb file or <%# encoding: utf-8 %> if it's a .erb file.

like image 102
Frane Avatar answered Nov 05 '22 18:11

Frane