[Ruby]String#b

RubyではバイナリデータもStringとして扱われる。

多言語化 (Ruby 3.2 リファレンスマニュアル)

Ruby の String は、文字の列を扱うためだけでなく、バイトの列を扱うためにも使われます。しかし、Ruby M17N には直接にバイナリを表すエンコーディングは存在しません。このため、バイナリを String で扱う際には、ASCII 互換オクテット列を意味する ASCII-8BIT を用います。これにより、ASCII 互換であるこの String は 7bit クリーンな文字列と比較・結合が可能となります。

String#bを使えばEncoding情報をASCII-8BITに変換できる

class String (Ruby 3.2 リファレンスマニュアル)

self の文字エンコーディングを ASCII-8BIT にした文字列の複製を返します。

"あいうえお".encoding
# => #<Encoding:UTF-8>

"あいうえお".b.encoding # => #<Encoding:ASCII-8BIT>

バイト単位での検索をする場合は、Ruby3.2から追加された String#byteindex, String#byterindexメソッドが便利そう

文字単位のインデックスを返すindexやrindexとは異なり、バイト単位でのインデックスを返す

"たけやぶやけた".index('け') # => 1
"たけやぶやけた".rindex('け') # => 5
"たけやぶやけた".byteindex('け') # => 3
"たけやぶやけた".byterindex('け') # => 15

【参考】