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