ruby-on-rails - 如何在 Ruby 中对字符串进行 URL 编码

标签 ruby-on-rails ruby string uri urlencode

我如何URI::encode一个像这样的字符串:

\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a

以如下格式获取它:

%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF%124Vx%9A

根据 RFC 1738?

这是我尝试过的:

irb(main):123:0> URI::encode "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a"
ArgumentError: invalid byte sequence in UTF-8
    from /usr/local/lib/ruby/1.9.1/uri/common.rb:219:in `gsub'
    from /usr/local/lib/ruby/1.9.1/uri/common.rb:219:in `escape'
    from /usr/local/lib/ruby/1.9.1/uri/common.rb:505:in `escape'
    from (irb):123
    from /usr/local/bin/irb:12:in `<main>'

还有:

irb(main):126:0> CGI::escape "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a"
ArgumentError: invalid byte sequence in UTF-8
    from /usr/local/lib/ruby/1.9.1/cgi/util.rb:7:in `gsub'
    from /usr/local/lib/ruby/1.9.1/cgi/util.rb:7:in `escape'
    from (irb):126
    from /usr/local/bin/irb:12:in `<main>'

我在互联网上搜索了所有内容,但还没有找到执行此操作的方法,尽管我几乎可以肯定前几天我完全没有遇到任何问题。

最佳答案

str = "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a".force_encoding('ASCII-8BIT')
puts CGI.escape str


=> "%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF%124Vx%9A"

关于ruby-on-rails - 如何在 Ruby 中对字符串进行 URL 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6714196/

相关文章:

ruby-on-rails - 同一用户的 Authlogic 和多个 session

Ruby - Expect 和 Pty 的问题

javascript - 替换字符串,除非它在给定字符串的某个子字符串中

javascript - 我怎样才能让我的函数处理多个字符串数组?

ruby-on-rails - Rails 3.1 - 在编辑时显示表单值?

ruby-on-rails - 在 ruby​​ on rails 3 中通过电子邮件创建订阅

mysql - Railed 数据库嵌套搜索混淆 : part 2

ruby - 遍历数组的前 n 个元素

ruby-on-rails - 无法将签名板的JSON转换为回形针图像(Ruby on Rails)

不能在 C 中将 sscanf() 用于字符数组