Ruby 为什么';我的代码读错十六进制了吗?

Ruby 为什么';我的代码读错十六进制了吗?,ruby,irb,Ruby,Irb,当我在IRB中运行以下代码时: 1.9.3p194 :001 > x = %w(‎61 6C 6C 20 75 72 20 73 79 73 74 65 6D 73 20 62 65 6C 6F 6E 67 20 32 20 75 73) 1.9.3p194 :002 > puts x.map {|z| z.to_i(16)}.map(&:chr).join.inspect 我得到: "\x00ll ur systems belong 2 us" => nil 然而

当我在IRB中运行以下代码时:

1.9.3p194 :001 > x = %w(‎61 6C 6C 20 75 72 20 73 79 73 74 65 6D 73 20 62 65 6C 6F 6E 67 20 32 20 75 73)
1.9.3p194 :002 > puts x.map {|z| z.to_i(16)}.map(&:chr).join.inspect
我得到:

"\x00ll ur systems belong 2 us"
=> nil
然而,
“61”。到i(16)。chr
“a”
,而不是
“\x00”


这是怎么回事?

问题是,在
%w(
之后有一个不可见的Unicode。当我通过堆栈溢出看到它时,它显示为UTF-8编码,但看起来它一定是(Windows?)原始源代码中的UTF-16。

问题在于,您在
%w(
)后面有一个不可见的Unicode。当我通过堆栈溢出看到它时,它显示为UTF-8编码,但看起来它一定是(Windows?)原始源代码中的UTF-16。

哇,这有点奇怪,但pry展示了它…进一步说明:当我从示例中复制粘贴时,我得到
x=%w(\U+ffe2616c6c20772207373774656d732062656c6f672207573)
Wow,这有点奇怪,但是pry展示了它……进一步说明:当我从示例中复制粘贴时,我得到
x=%w(\U+ffe2616c6c2075720207373737374656d7320262656c6f6e67202075)