Rubyで<ArgumentError: invalid byte sequence in US-ASCII>エラーを解決した時のメモ

<ArgumentError: invalid byte sequence in US-ASCII>エラーを解決した時のメモです。

環境

問題

コメントに全角文字があるだけで、debuggerのところでエラーで落ちてしまう。

# frozen_string_literal: true
require 'debug'

arr = ["a", "b", "c"] #コメント

arr.each do |a|
  debugger
  puts a.capitalize
end

エラーログ

#<ArgumentError: invalid byte sequence in US-ASCII>
["/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.2/lib/reline/unicode.rb:71:in `ord'",
 "/home/rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.2/lib/reline/unicode.rb:71:in `block in escape_for_print'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.2/lib/reline/unicode.rb:70:in `map!'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/reline-0.3.2/lib/reline/unicode.rb:70:in `escape_for_print'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.6.2/lib/irb/color.rb:137:in `block in colorize_code'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.6.2/lib/irb/color.rb:190:in `block (2 levels) in scan'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.6.2/lib/irb/color.rb:203:in `block (2 levels) in scan'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.6.2/lib/irb/color.rb:201:in `each'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.6.2/lib/irb/color.rb:201:in `block in scan'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.6.2/lib/irb/ruby-lex.rb:45:in `rescue in compile_with_errors_suppressed'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.6.2/lib/irb/ruby-lex.rb:34:in `compile_with_errors_suppressed'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/irb-1.6.2/lib/irb/color.rb:177:in `scan'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/debug-1.7.1/lib/debug/breakpoint.rb:69:in `suspend'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/debug-1.7.1/lib/debug/breakpoint.rb:178:in `block in setup'",
 "/home/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/debug-1.7.1/lib/debug/session.rb:2586:in `debugger'",
  "sample.rb:7:in `block in <main>'",
 "sample.rb:6:in `each'",
 "sample.rb:6:in `<main>'"]

解決策①

ファイルの先頭にマジックコメント# encoding: UTF-8を付ける

解決策②

Rubyエンコーディングを変更する

$ ruby -e 'puts Encoding.default_external'
US-ASCII
$ export RUBYOPT=-EUTF-8
$ ruby -e 'puts Encoding.default_external'
UTF-8

調べたこと

p "aiueo".encoding                        # #<Encoding:UTF-8>
p "aiueo".encode('US-ASCII').encoding   # #<Encoding:US-ASCII>

参考にしたサイト

RubyのデフォルトはUTF-8だと勘違いしてたので、勉強になりました。