在escape_javascript中处理UTF-8



我得到了部分_searchresults.html。必须以UTF-8格式保存的动词

然后我有一些javascript/AJAX代码来渲染部分:

<% # encoding: utf-8
%>
stopLoading();
$('#searchresults').html('<%= escape_javascript( render("shared/searchresults") ) %>'); 

每次我试图访问相关页面,我得到:

ActionView::Template::Error (invalid byte sequence in UTF-8):
1: <% # encoding: utf-8
2: %>
3: stopLoading();
4: $('#searchresults').html('<%= escape_javascript( render("shared/searchresults") ) %>');
app/views/searches/index.de.js.erb:4:in  `_app_views_searches_index_de_js_erb__423966875_35661432__279394272'

我所有的文件都是用UTF-8和所有相关的*编码的。erb文件有# encoding: utf-8魔术注释。

我能做点什么吗?

编辑:

我现在试图手动逃离js:

def my_js_escape( js )
  if( js )
    ret = js.force_encoding( 'utf-8' )
    ret.gsub!( /\/u, '\\' )

    #ret.gsub!( /<//u, '</' ).force_encoding( 'utf-8' )
    #ret.gsub!( /"/u, '\"' ).force_encoding( 'utf-8' )
    #ret.gsub!( /'/u, "\'" ).force_encoding( 'utf-8' )
    #/(\|</|rn|[nr"'])/
    return ret
  else
    ''
  end
end

Ruby给了我相同的错误在每个gsub调用,即使我把。force_encoding在所有的替换字符串。

自Ruby192以来,所有这些编码问题都是令人讨厌的。试着这样做,看看是否有效:

4: $('#searchresults').html('<%= escape_javascript( render("shared/searchresults").force_encoding("utf-8") ) %>');

OK。所以那是一列失败的火车…看看这个页面…它帮助我解决了一个类似的问题,你正在看…

http://peppyheppy.com/2011/1/20/ruby-1-9-2-encoding-utf-8-and-rails-invalid-byte-sequence-in-us-ascii

我最终完成了它,这不是最漂亮的解决方案,但我必须手动转换我想要显示的每个字符串:

def self.encode( string )
    unless string.nil?
        string.encoding == 'UTF-8'? string : string.force_encoding( 'utf-8');
    end
end

thx, 2potatocakes你的链接有帮助

相关内容

  • 没有找到相关文章

最新更新