为什么我的代码没有正确读取十六进制?

时间:2012-08-15 22:33:45

标签: 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

"61".to_i(16).chr"a",而非"\x00"

那里发生了什么?

1 个答案:

答案 0 :(得分:6)

问题是您在%w(之后有一个不可见的Unicode left-to-right mark,。当我通过Stack Overflow看到它时,它显示为以UTF-8编码,但它看起来像是原始源中的(Windows?)UTF-16。