我需要在Ruby中转换一个包含字符“ö”的URL。
在PHP中,urlencode返回ö的%F6,这似乎是ISO 8859中“ö”的十六进制值。
我尝试了几种不同的方法,但是没有一个返回正确的字符:
我应该使用哪种方法来获得所需的输出?
-e-
其他要求:
我只需要在URL路径中转换这些字符。冒号,斜杠等应保持不变:
http://example.com/this/is/an/ö
将是
答案 0 :(得分:8)
Ruby默认使用UTF-8字符串:
str = 'ö'
str.encoding
#=> #<Encoding:UTF-8>
如果要在Ruby中使用ISO 8859编码的字符串,则必须将其转换:
str.encode('ISO-8859-1')
#=> "\xF6"
要对字符串进行URL编码,请使用CGI.escape
:
require 'cgi'
CGI.escape(str.encode('ISO-8859-1'))
#=> "%F6"
要编码URL,请使用URI.escape
:
require 'uri'
url = 'http://example.com/this/is/an/ö'
URI.escape(url.encode('ISO-8859-1'))
#=> "http://example.com/this/is/an/%F6"
答案 1 :(得分:1)
我找到了解决方法
converter = Encoding::Converter.new("utf-8", "iso-8859-1")
CGI.escape(converter.convert('ö'))
=> "%F6"