2

如何重现

宝石文件

gem 'haml'
gem 'sass'
gem 'coffee-script'

应用程序/app.rb

get '/javascripts/rus_test.js' do
  content_type 'text/javascript', charset: 'utf-8'
  coffee :"../../public/javascripts/rus_test"
end

public/javascripts/rus_test.coffee(它的工作)

alert 'Hello World!'

本地主机:3000/javascripts/rus_test.js

(function() {

  alert('Hello World!');

}).call(this);

public/javascripts/rus_test.coffee(不起作用)

alert 'Привет!'

给出错误

/javascripts/rus_test.js "\xD0" 处的编码::UndefinedConversionError 从 ASCII-8BIT 到 UTF-8

我尝试在config/boot.rb中设置 Encoding.default 的几个变体。

启动初始化的变体之一

Padrino.before_load do
  Encoding.default_internal = nil
  # Encoding.default_external = 'ASCII-8BIT'
end

它适用于带有俄语文本的 HAML,但不适用于 SASS 和 COFFEE

我应该怎么做才能修复它?

4

1 回答 1

2

删除荒谬Encoding.default_internal = nil并将此代码添加到猴子补丁倾斜的某处:

# this makes tilt to treat templates as properly encoded (respect Encoding.default_external)
module Tilt
  class CoffeeScriptTemplate
    def prepare
      @data.force_encoding Encoding.default_external
      if !options.key?(:bare) and !options.key?(:no_wrap)
        options[:bare] = self.class.default_bare
      end
    end
  end
end
于 2012-06-03T09:49:22.370 回答