前提
Base64のエンコードとデコードをするモジュールを書いたんですが、上手くいかないところがあります
コード
Ruby
1module Base64 2 TABLE = [*"A".."Z", *"a".."z", *"0".."9", "+", "/"] 3 4 BIN_TO_CHAR = TABLE.map.with_index.to_h do |char, index| 5 ["%06b" % index, char] 6 end 7 CAHR_TO_BIN = BIN_TO_CHAR.invert 8 9 module_function 10 11 def encode(str) 12 binary_str = str.bytes.map { |b| "%08b" % b }.join 13 binary_str << "0" * (-binary_str.size % 6) 14 15 base_str = binary_str.gsub(/\d{6}/, BIN_TO_CHAR) 16 17 base_str << "=" * (-base_str.size % 4) 18 end 19 20 def decode(base_str) 21 unless base_str.size % 4 == 0 && base_str.delete("=").chars.all? { |c| TABLE.include?(c) } 22 raise "wrong argument" 23 end 24 25 binary_str = base_str.gsub(/./, CAHR_TO_BIN) 26 27 [binary_str].pack("B*") 28 end 29end
実装したいこと
decode
の戻り値は、"\xE3\x81\x82"
のような文字コード的な文字列になります
これを普通の文字列にしたいです
puts
すると普通の文字列になるのでto_s
してみたのですが効果なしでした
補足情報(FW/ツールのバージョンなど)
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [i386-mingw32]
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/03/19 01:49