Ruby中的百分比编码

evvie

在Ruby中,我得到了'ä'的百分比编码

require 'cgi'
CGI.escape('ä')
=> "%C3%A4"

与相同

'ä'.unpack('H2' * 'ä'.bytesize)
=> ["c3", "a4"]

我有两个问题:

  1. 第一次操作的反面是什么?不是吗

    ["c3", "a4"].pack('H2' * 'ä'.bytesize)
    => "\xC3\xA4"
    
  2. 对于我的应用程序,我需要将“ä”编码为“%E4”,即“ä” .ord的十六进制值。是否有任何Ruby方法?

佛罗兹

正如我在评论中提到的,将字符ä等同于代码点228(0xE4)意味着您正在处理ISO 8859-1字符编码

因此,您需要告诉Ruby您的字符串想要哪种编码。

str1 = "Hullo ängstrom" # uses whatever encoding is current, generally utf-8
str2 = str1.encode('iso-8859-1')

然后,您可以根据需要对其进行编码:

require 'cgi'
s2c = CGI.escape str2
#=> "Hullo+%E4ngstrom" 

require 'uri'
s2u = URI.escape str2
#=> "Hullo%20%E4ngstrom" 

然后,要反转它,您必须首先(a)解开该值,然后(b)将编码恢复为您以前使用的编码(可能是UTF-8),并告诉Ruby它应将什么字符编码解释为代码点

s3a = CGI.unescape(s2c)  #=> "Hullo \xE4ngstrom"
puts s3a.encode('utf-8','iso-8859-1')
#=> "Hullo ängstrom"

s3b = URI.unescape(s2u)  #=> "Hullo \xE4ngstrom"
puts s3b.encode('utf-8','iso-8859-1')
#=> "Hullo ängstrom"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章