HTML кодировать строку UTF-8 искажается в latin1 - PullRequest
3 голосов
/ 01 апреля 2010

Я анализирую свои логи nginx и хочу узнать некоторые подробности из строки HTTP_REFERER, например, строку запроса, используемую для поиска веб-сайта. Один пользователь набрал «México», который в журнале закодирован как «query = M% E9xico».

Проходя через Rack::Utils.parse_query('query=M%E9xico'), вы получаете хеш, {"query" => "M?xico"}

Когда вы запихиваете "M? Exico" в Postgres (но не в более щадящий SQLite), это вызывает недовольство, потому что строка не соответствует UTF-8. Глядя на http://rack.rubyforge.org/doc/Rack/Utils.html#M000324, unescape упаковывает шестнадцатеричную строку.

Как я могу преобразовать строку обратно в UTF-8, или я могу получить parse_query для возврата UTF-8 в первую очередь.

Ответы [ 2 ]

1 голос
/ 13 марта 2013

unescape расшифрует кодировку URL:

Rack::Utils.parse_query(URI.unescape('query=M%E9xico'))

Или

Rack::Utils.parse_query(Utils.unescape('query=M%E9xico'))
0 голосов
/ 13 марта 2013

Проблема здесь возникает задолго до того, как вы получите данные. Вам нужно решить проблему в апстриме, если вы можете, и если вы не можете, то я предлагаю выяснить кодировку и преобразовать ее при вводе или использовать библиотеки преобразования в Ruby (например, iconv).

Однако проблема не в PostgreSQL.

...