Ruby on Rails Обработка UTF-8 в escape_javascript - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть частичный _searchresults.html.erb, который должен быть сохранен в 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.

Что я могу с этим поделать?

EDIT:

Я сейчас пытаюсь избежать 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

Ruby выдает мне ту же ошибку при каждом вызове gsub, даже если я добавлю .force_encoding во все строки замены.

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Все эти проблемы с кодировкой, начиная с 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

0 голосов
/ 08 апреля 2011

Я наконец сделал это, не самое красивое решение, но мне пришлось вручную конвертировать каждую строку, которую я хотел отобразить:

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

спасибо, 2potatocakes ваша ссылка помогла

...