0

我有一个必须以UTF-8保存的部分_searchresults.html.erb。Ruby on Rails在escape_javascript中处理UTF-8

然后我有一些javaxript/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') 
    #/(\\|<\/|\r\n|[\n\r"'])/ 
    return ret 
    else 
    '' 
    end 
end 

红宝石使我对每一个来电GSUB同样的错误,即使我把.force_encoding上的所有替换字符串。

回答

0

我终于做到了,不是最漂亮的解决方案,但我不得不手动转换每个字符串我想与显示:

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

THX,2potatocakes你的链接帮助

1

所有自Ruby192这些编码的问题一直在屁股痛..尝试这样做,看看它的工作原理:

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

确定。所以这是一个失败的列车..看看这个页面。它帮我解决了类似的问题的一个你看..

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

+0

不幸的是,它不-.-还是同样的错误 – DeX3 2011-04-07 10:40:48

+0

道歉DEX3,试试上面改为链接。让我知道它是否有效 – 2potatocakes 2011-04-07 23:23:57

+0

它对我有效,但我不得不强制输出** render **的编码:'(render(“shared/searchresults”))。force_encoding(“utf-8”)' – 2017-06-13 09:46:14