这是一个字符编码的问题会工作得很好。阅读从JPEG前4个字节返回一个ASCII编码的字符串:在另一方面
head = File.read("some.jpg", 4)
# => "\xFF\xD8\xFF\xE1"
head.encodig
# => #<Encoding:ASCII-8BIT>
字符串是UTF-8编码:
jpg_prefix = "\xff\xd8\xff"
# => "\xFF\xD8\xFF"
jpg_prefix.encoding
# => #<Encoding:UTF-8>
比较UTF-8和ASCII字符串不为工作预计:
head[0,3] == jpg_prefix
# => false
你必须明确地设定String#force_encoding
编码:
jpg_prefix = "\xff\xd8\xff".force_encoding(Encoding::ASCII_8BIT)
# => "\xFF\xD8\xFF"
jpg_prefix.encoding
# => #<Encoding:ASCII-8BIT>
head[0,3] == jpg_prefix
# => true
与Integer#chr
(由马里奥Visic建议)创建级联ASCII字符也可以工作:
jpg_prefix = 0xff.chr + 0xd8.chr + 0xff.chr
# => "\xFF\xD8\xFF"
jpg_prefix.encoding
# => #<Encoding:ASCII-8BIT>
或使用Array#pack
:
jpg_prefix = ["FFD8FF"].pack("H*")
# => "\xFF\xD8\xFF"
jpg_prefix.encoding
# => #<Encoding:ASCII-8BIT>
你的数据是怎样的? –
@Anand我使用data [0,3]来获取我在 – Kyle