高木のブログ

【Ruby】Base64.encode64 は改行コードが入る

2022/10/16

Ruby で Base64.encode64 を使った時に末尾に改行コード(\n)が入っていることに気がついた

require 'base64'

Base64.encode64('こんにちはこんにちはこんにちはこんにちは')
#=> "44GT44KT44Gr44Gh44Gv44GT44KT44Gr44Gh44Gv44GT44KT44Gr44Gh44Gv\n44GT44KT44Gr44Gh44Gv\n"

RFC2045 の仕様に準拠していて、末尾以外にも60文字ごとに改行コードが追加されるっぽい(Base64.#encode64 (Ruby 3.1 リファレンスマニュアル)

改行コードが入って欲しくない時は、Base64.strict_encode64 を使うと良い

require 'base64'

Base64.strict_encode64('こんにちはこんにちはこんにちはこんにちは')
#=> "44GT44KT44Gr44Gh44Gv44GT44KT44Gr44Gh44Gv44GT44KT44Gr44Gh44Gv44GT44KT44Gr44Gh44Gv"

これは RFC4648 の仕様に準拠している(Base64.#strict_encode64 (Ruby 3.1 リファレンスマニュアル)

参考

RubyのBase64.encode64はエンコード後文字列が60文字以上になると改行コードが入る - コード日進月歩


ytkg

Written by ytkg, Twitter, GitHub