ruby中的URL编码
我有一段代码:ruby中的URL编码,ruby,url-encoding,Ruby,Url Encoding,我有一段代码: temp = "Cancel" puts CGI::escape(words[1]) puts "\n" puts CGI::escape(temp) puts "\n" puts words[1] puts "\n" puts temp puts "\n" 我的输出是: %00C%00a%00n%00c%00e%00l%00 Cancel Cancel Cancel 我认为公平的假设是,这里的问题是我设置单词数组的方式。然而,我想知道这是否是一种常见的行为,有解决办法
temp = "Cancel"
puts CGI::escape(words[1])
puts "\n"
puts CGI::escape(temp)
puts "\n"
puts words[1]
puts "\n"
puts temp
puts "\n"
我的输出是:
%00C%00a%00n%00c%00e%00l%00
Cancel
Cancel
Cancel
我认为公平的假设是,这里的问题是我设置单词数组的方式。然而,我想知道这是否是一种常见的行为,有解决办法吗?如果不是,我做错了什么会导致这种情况
我的单词数组是通过从文件中读取数据,然后分割每一行并提取我需要的信息来设置的,所以它并不太复杂。字符串中有NUL字节<代码>放置只是忽略它们
1.9.2p290 :016 > puts "Fo\0oooo"
Fooooo
=> nil
使用inspect,您可以看到:
1.9.2p290 :017 > puts "Fo\0oooo".inspect
"Fo\u0000oooo"
=> nil
这里是CGI::escape的输出
1.9.2p290 :018 > puts CGI::escape("Fooo\0ooo")
Fooo%00ooo
=> nil
编辑:
快速而肮脏的解决方案是将其移除:
"Fooooo\0ooo".gsub(/\0/, "")
=> "Foooooooo"
但是,由于每个字符前面都有NUL字节,因此最好检查代码以读取文件。如果您提供代码,就更容易找到解决方案。字符串中有NUL字节<代码>放置
只是忽略它们
1.9.2p290 :016 > puts "Fo\0oooo"
Fooooo
=> nil
使用inspect,您可以看到:
1.9.2p290 :017 > puts "Fo\0oooo".inspect
"Fo\u0000oooo"
=> nil
这里是CGI::escape的输出
1.9.2p290 :018 > puts CGI::escape("Fooo\0ooo")
Fooo%00ooo
=> nil
编辑:
快速而肮脏的解决方案是将其移除:
"Fooooo\0ooo".gsub(/\0/, "")
=> "Foooooooo"
但是,由于每个字符前面都有NUL字节,因此最好检查代码以读取文件。如果您提供代码,则更容易找到解决方案。您的字符串是否采用16位编码?@muistooshort表示同意。它有UTF-16的味道。你的字符串可能是16位编码吗?@muistooshort,同意。它有UTF-16的味道。一个更好的解决方案是确定文件是否为UTF-16,如果是,在读取之前打开它。我写道:但是由于每个字符前面都有NUL字节,所以最好检查代码以读取文件。
,这包括检查编码,不是吗?我尝试以UTF-16BE和UTF-16LE两种格式打开文件,但这两种格式都会导致以下错误:ASCII不兼容编码需要binmode(ArgumentError)
。以二进制方式打开显然没有多大帮助,所以有什么想法吗?一个更好的解决方案是确定文件是否为UTF-16,如果是,那么在读取之前就这样打开它。我写道:但是由于每个字符前面都有NUL字节,所以最好检查代码以读取文件。
,这包括检查编码,不是吗?我尝试以UTF-16BE和UTF-16LE两种格式打开文件,但这两种格式都会导致以下错误:ASCII不兼容编码需要binmode(ArgumentError)
。以二进制形式打开显然没有多大帮助那么有什么想法吗?