我看了一下 issue 中的回复,也看了 qr_8bit_byte.rb 的源码。作者实际意图是逐个字节的去分析传入的字符串,并把它们作为 ASCII 码来对待,得到在 ASCII 码中的位置。但是作者使用了 string 的 [] 方法,导致无法兼容 1.9.2 以后的版本,因为后续版本 [] 方法得到的是一个字符而不是字节。 因为 cp852 是 ascii 码的 8 位扩展编码,强行更改字符串的编码为 cp852 后,巧妙的解决了这个问题。既能够让 ruby 按照每个字符像字节一样的迭代,也满足了作者在算法上需要得到字节的 ASCII 位置的需要。 其实 cp852 也不是唯一的编码解决方案,理论上来说,只要是欧洲的 ASCII 扩展码体系,应该都适用。或者直接使用 Ruby 的 ASCII-8BIT 编码也可以。