#ruby-on-rails #ruby #http #encoding #utf-8
#ruby-on-rails #ruby #http #кодирование #utf-8
Вопрос:
Я запускаю приложение Ruby on Rails, и, поскольку сайт становится все более популярным на международном уровне, у меня начались ошибки, связанные с кодировкой, например:
Encoding::UndefinedConversionError: «xE8» из ASCII-8BIT в UTF-8
Я пытаюсь найти симулятор HTTP-запросов, который поддерживает различные кодировки для воспроизведения ошибок, но мне не очень повезло.
Кто-нибудь знает, как имитировать или тестировать HTTP-запросы с параметрами / путями, отличными от UTF8?
Ответ №1:
Кодировка — это то, как вы представляете свой текст в байтах. Пока вы кодируете / декодируете текст, используя ту же кодировку, все должно быть в порядке. Если вы кодируете / декодируете его с использованием разных кодировок, он будет по-разному интерпретировать последовательности байтов и приводить к ошибкам.
Обычно вы контролируете используемые кодировки, и веб-сервер может обрабатывать базовые преобразования. Браузер <—encoding—> сервер <—encoding—> файлы
Обычно нет необходимости «находить симулятор HTTP-запросов, который поддерживает различные кодировки», поскольку вы обычно определяете, какой из них используется на стороне сервера, или веб-сервер обрабатывает преобразование.
Если какой-то странный клиент использует какую-то странную кодировку, которую невозможно распознать, я бы сказал, что это либо серьезная проблема на вашем веб-сервере, в вашей конфигурации, либо что-то подобное. …или в самих файлах, которые не закодированы в том же формате, который вы используете для их чтения.
… наконец, я считаю, что почти любой HTTP-клиент поддерживает множество кодировок для тела.
Редактировать:
Поскольку вы упомянули URL-адреса:
URL-адреса должны быть закодированы с использованием простого старого ASCII. Даже если вы используете необычные символы UTF8, браузер переведет их под ними. http://en.wikipedia.org/wiki/Percent-encoding
Использование странных кодировок для URL-адресов и недопустимых символов является ошибкой клиента и должно быть исправлено на стороне клиента IMHO.