【发布时间】:2010-04-01 02:12:52
【问题描述】:
我正在解析我的 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。
【问题讨论】:
-
日志中的信息已损坏:%E9 表明它不是 UTF-8。如果不假设初始字符集是什么,您就无法转换它。
标签: ruby-on-rails postgresql rack