我正在解析我的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。
答案 0 :(得分:1)
unescape将解码URL编码:
Rack::Utils.parse_query(URI.unescape('query=M%E9xico'))
或者
Rack::Utils.parse_query(Utils.unescape('query=M%E9xico'))
答案 1 :(得分:0)
这里的问题在您获得数据之前就已经发生了。你需要在上游修复问题,如果你不能,那么我的建议就是找出编码并在输入时转换它或者使用Ruby中的转换库(例如iconv)。
问题不在PostgreSQL中。