2013-12-03 3 views
5

Я использую Ruby 2.0 и Rails 3.2.14. На мой взгляд завален несколько UTF-8 символов, в основном символы валют как บาท и د.إ и т.д. Я заметил, что некоторыеПроблемы с кодированием Rails

(ActionView::Template::Error) "incompatible character encodings: ASCII-8BIT and UTF-8 

в нашем производственном коде и быстро пытавшихся посещения URL страницы на моем браузере без каких-либо проблем. При копании я понял, что ошибка была фактически вызвана BingBot и несколькими пауками. Поэтому, когда я попытался свернуть один и тот же URL-адрес, я смог воспроизвести проблему. Итак, если я попробую

curl http://localhost:3000/?x=✓ 

Я получаю сообщение об ошибке, когда символы UTF-8 используются в коде просмотра. Я также понял, что если использовать символы с кодировкой HTML вместо символов, это не происходит. Однако я предпочитаю использовать фактические символы.

И я уже пытался установить Encoding.default_external = Encoding :: UTF_8 в environment.rb, добавляя #encoding: utf-8 магический комментарий к началу файла, и это не помогает.

Итак, почему возникает эта ошибка? В чем разница между ударом этого URL-адреса в браузере и CURL, кроме файлов cookie? И как мне решить эту проблему и позволить BingBot индексировать наш сайт? Благодарю.

ответ

4

Преступник, который был неплотные UTF-8 символов в шаблоне был безвредным мета-тег для Facebook Open Graph

%meta{property: "og:url", content: request.url} 

И когда запрос не является стандартным, это вызывает вопрос кодирования. Изменение его на

%meta{property: "og:url", content: request.url.force_encoding('UTF-8')} 

сделал трюк.

2

Это сообщение об ошибке обычно возникает, когда вы пытаетесь объединить строки с разными кодировками символов.

В вашей базе данных также используется UTF-8?

Если нет, может возникнуть проблема при попытке вставить значения, отличные от UTF8, в ваш шаблон UTF-8.

+0

Да, я использую postgres, и моя кодировка базы данных также UTF8. Вы совершенно правы в том, что значения не UTF8 в UTF-8 вызывают это, но в моем случае это не была база данных. – membLoper

Смежные вопросы