运行rake资产时出现字符编码错误:预编译

时间:2013-01-16 21:12:38

标签: ruby-on-rails twitter-bootstrap character-encoding sass asset-pipeline

当我尝试运行rake assets:precompile时,我的rails应用程序出现了一个奇怪的错误。它看起来像这样:

rake aborted!
Invalid US-ASCII character "\xE2"
  (in /Users/lee/Code/draper/app/assets/stylesheets/application.css.scss)
(sass):9

我不确定无效字符可能会进入我的代码。我正在使用Twitter Bootstrap(boostrap-sass gem),我的bootstrap_and_overrides.css.scss文件似乎是罪魁祸首。我已经尝试在文本配合中从头开始重新创建这个文件,以获取任何奇怪的角色,但这不起作用。唯一可行的方法是将其添加到bootstrap_and_overrides.css.scss的顶部:

@charset "UTF-8";

这允许我运行rake资产:预编译然后部署到Heroku,但这似乎是一个黑客和一个肮脏的修复。我可以将其他应用程序部署到使用bootstrap-sass的Heroku,并且Heroku能够运行rake资产:部署时预编译。现在,解决它的唯一方法是包括@charset "UTF-8";,然后在部署到Heroku之前在本地运行rake assets:precompile,以便在部署期间跳过该步骤。

我无法弄清楚我在哪里出错了。

2 个答案:

答案 0 :(得分:5)

检查您的CSS文件。字符\xE2通常与双引号字符相关,该字符不是ASCII字符集的一部分。在编辑器中,它们通常看起来像一个更倾斜的双引号。 “mystring” vs "mystring"

使用@charset声明不是黑客,但如果您不需要使用UTF-8字符,那么最好将其删除。

答案 1 :(得分:2)

声明文件的正确编码不是黑客攻击,文本文件总是需要声明的编码和物理编码。无论如何,你可以用文件上的iconv删除所有非ascii字符:

iconv -t ASCII//IGNORE -f UTF8 < application.css.scss > application.css.scss.ascii

然后生成的文件几乎可以用于任何编码。