irb
irb copied to clipboard
Up arrow raises Encoding::UndefinedConversionError
Description
ruby 2.7.0 & irb 1.2.1 (2019-12-24), press up arrow and the following exception is raised:
irb(main):001:0> Traceback (most recent call last):
35: from /Users/dlary/.rbenv/versions/2.7.0/bin/irb:23:in `<main>'
34: from /Users/dlary/.rbenv/versions/2.7.0/bin/irb:23:in `load'
33: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>'
32: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:398:in `start'
31: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:469:in `run'
30: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:469:in `catch'
29: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:470:in `block in run'
28: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:535:in `eval_input'
27: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:134:in `each_top_level_statement'
26: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:134:in `catch'
25: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:135:in `block in each_top_level_statement'
24: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:135:in `loop'
23: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:138:in `block (2 levels) in each_top_level_statement'
22: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:166:in `lex'
21: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:516:in `block in eval_input'
20: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:693:in `signal_status'
19: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:517:in `block (2 levels) in eval_input'
18: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/input-method.rb:258:in `gets'
17: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/forwardable.rb:235:in `readmultiline'
16: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/forwardable.rb:235:in `readmultiline'
15: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:170:in `readmultiline'
14: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:232:in `inner_readline'
13: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:232:in `loop'
12: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:233:in `block in inner_readline'
11: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:262:in `read_io'
10: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:262:in `loop'
9: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:286:in `block in read_io'
8: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:234:in `block (2 levels) in inner_readline'
7: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:234:in `each'
6: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:235:in `block (3 levels) in inner_readline'
5: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/line_editor.rb:829:in `input_key'
4: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/line_editor.rb:787:in `normal_char'
3: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/line_editor.rb:758:in `process_key'
2: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/line_editor.rb:1109:in `ed_insert'
1: from /Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/unicode.rb:70:in `get_mbchar_width'
/Users/dlary/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/unicode.rb:70:in `encode': "\\xCF" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
Terminal Emulator
What's your terminal emulator? iTerm2
Pertinent environment variables:
LANG=en_US.UTF-8
LC_TERMINAL=iTerm2
LC_TERMINAL_VERSION=3.3.9
TERM=xterm
TERM_PROGRAM=iTerm.app
TERM_PROGRAM_VERSION=3.3.9
Hello,
No news on that bug/problem ?
I'm on MacOs and got the same since I use zsh (but I had a lot of other things to make it work)
hi, @ShamoX . Can you tell me the version of Ruby, IRB and Reline? I couldn't reproduce the problem in my environment as follows.
% echo $LANG
ja_JP.UTF-8
% echo $LC_TERMINAL
iTerm2
% echo $LC_TERMINAL_VERSION
3.4.13
% echo $TERM
xterm-256color
% echo $TERM_PROGRAM
iTerm.app
% echo $TERM_PROGRAM_VERSION
3.4.13
% RBENV_VERSION=2.7.0 irb
irb(main):001:0> RUBY_DESCRIPTION
=> "ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [-darwin21]"
irb(main):002:0> IRB::VERSION
=> "1.2.1"
irb(main):003:0> Reline::VERSION
=> "0.1.2"
irb(main):004:0>
Also, is it possible to do gem install irb to check with the latest version of irb?
Ahah, I'm waking up something old it seems.
In my terminal without Ruby version imposed by rbenv (using 2.7.0 installed on the system):
rlaures@Chacana infra % echo $LANG
fr_FR.UTF-8
rlaures@Chacana infra % echo $LC_TERMINAL
rlaures@Chacana infra % echo $LC_TERMINAL_VERSION
rlaures@Chacana infra % echo $TERM
xterm-256color
rlaures@Chacana infra % echo $TERM_PROGRAM
Apple_Terminal
rlaures@Chacana infra % echo $TERM_PROGRAM_VERSION
443
rlaures@Chacana infra % RBENV_VERSION=2.7.0 irb
irb(main):001:0> RUBY_DESCRIPTION
=> "ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin15]"
irb(main):002:0> IRB::VERSION
=> "1.2.1"
irb(main):003:0> Reline::VERSION
=> "0.1.2"
irb(main):004:1* def toto
irb(main):005:1* 1
irb(main):006:0> end
=> :toto
irb(main):007:0> toto
=> 1
irb(main):008:0> toto
=> 1
irb(main):009:0>
Also working on ruby 3 :
rlaures@Chacana infra % rbenv global 3.0.2
rlaures@Chacana infra % irb
irb(main):001:0> RUBY_DESCRIPTION
=> "ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [arm64-darwin21]"
irb(main):002:0> IRB::VERSION
=> "1.3.5"
irb(main):003:0> Reline::VERSION
=> "0.2.5"
irb(main):004:1* def toto
irb(main):005:1* 1
irb(main):006:0> end
=> :toto
irb(main):007:0> toto
=> 1
irb(main):008:0>
When using the same terminal that failed earlier (first instruction is a up arrow that failed when I filled up the message earlier):
irb(main):001:0> Traceback (most recent call last):
35: from /Users/rlaures/.rbenv/versions/2.7.0/bin/irb:23:in `<main>'
34: from /Users/rlaures/.rbenv/versions/2.7.0/bin/irb:23:in `load'
33: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>'
32: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:398:in `start'
31: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:469:in `run'
30: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:469:in `catch'
29: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:470:in `block in run'
28: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:535:in `eval_input'
27: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:134:in `each_top_level_statement'
26: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:134:in `catch'
25: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:135:in `block in each_top_level_statement'
24: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:135:in `loop'
23: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:138:in `block (2 levels) in each_top_level_statement'
22: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:166:in `lex'
21: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:516:in `block in eval_input'
20: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:693:in `signal_status'
19: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:517:in `block (2 levels) in eval_input'
18: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/input-method.rb:258:in `gets'
17: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/forwardable.rb:235:in `readmultiline'
16: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/forwardable.rb:235:in `readmultiline'
15: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:170:in `readmultiline'
14: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:232:in `inner_readline'
13: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:232:in `loop'
12: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:233:in `block in inner_readline'
11: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:262:in `read_io'
10: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:262:in `loop'
9: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:286:in `block in read_io'
8: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:234:in `block (2 levels) in inner_readline'
7: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:234:in `each'
6: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:235:in `block (3 levels) in inner_readline'
5: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/line_editor.rb:829:in `input_key'
4: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/line_editor.rb:787:in `normal_char'
3: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/line_editor.rb:758:in `process_key'
2: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/line_editor.rb:1109:in `ed_insert'
1: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/unicode.rb:70:in `get_mbchar_width'
/Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/unicode.rb:70:in `encode': "\\xCF" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
rlaures@Chacana i2tm % irba
rlaures@Chacana i2tm % irb
irb(main):001:1* def o_n_logn(n)
irb(main):002:1* 0.01 * n * Math.log(n) + 100
irb(main):003:0> end
=> :o_n_logn
irb(main):004:0> o_n_logn 10
=> 100.2302585092994
irb(main):005:0> o_n_logn 10000
=> 1021.0340371976183
irb(main):006:1* def o_n_2(n)
irb(main):007:1* 0.01 * n * n + 100
irb(main):008:0> end
=> :o_n_2
irb(main):009:0> o_n_2 10
=> 101.0
irb(main):010:0> o_n_2 10000
=> 1000100.0
irb(main):011:0>
rlaures@Chacana i2tm % echo $LANG
fr_FR.UTF-8
rlaures@Chacana i2tm % echo $LC_TERMINAL
rlaures@Chacana i2tm % echo $LC_TERMINAL
rlaures@Chacana i2tm % echo $LANG
fr_FR.UTF-8
rlaures@Chacana i2tm % echo $LC_TERMINAL
rlaures@Chacana i2tm % echo $LC_TERMINAL_VERSION
rlaures@Chacana i2tm % echo $TERM
xterm-256color
rlaures@Chacana i2tm % echo $TERM_PROGRAM
Apple_Terminal
rlaures@Chacana i2tm % echo $TERM_PROGRAM_VERSION
443
rlaures@Chacana i2tm % irb
irb(main):001:0> RUBY_DESCRIPTION
=> "ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [arm64-darwin21]"
irb(main):002:0> IRB::VERSION
=> "1.3.5"
irb(main):003:0> Reline::VERSION
=> "0.2.5"
irb(main):004:1* def toto
irb(main):005:1* 1
irb(main):006:0> end
=> :toto
irb(main):007:0> toto
=> 1
irb(main):008:0> toto
=> 1
irb(main):009:0>
So maybe rib changed because I did a rbenv global 3.0.2 in the other terminal.
So effectively, doing a rbenv global 2.7.0 and then I get back the error.
rlaures@Chacana i2tm % rbenv global 2.7.0
rlaures@Chacana i2tm % irb
irb(main):001:0> Traceback (most recent call last):
35: from /Users/rlaures/.rbenv/versions/2.7.0/bin/irb:23:in `<main>'
34: from /Users/rlaures/.rbenv/versions/2.7.0/bin/irb:23:in `load'
33: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>'
32: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:398:in `start'
31: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:469:in `run'
30: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:469:in `catch'
29: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:470:in `block in run'
28: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:535:in `eval_input'
27: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:134:in `each_top_level_statement'
26: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:134:in `catch'
25: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:135:in `block in each_top_level_statement'
24: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:135:in `loop'
23: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:138:in `block (2 levels) in each_top_level_statement'
22: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/ruby-lex.rb:166:in `lex'
21: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:516:in `block in eval_input'
20: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:693:in `signal_status'
19: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb.rb:517:in `block (2 levels) in eval_input'
18: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/irb/input-method.rb:258:in `gets'
17: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/forwardable.rb:235:in `readmultiline'
16: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/forwardable.rb:235:in `readmultiline'
15: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:170:in `readmultiline'
14: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:232:in `inner_readline'
13: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:232:in `loop'
12: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:233:in `block in inner_readline'
11: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:262:in `read_io'
10: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:262:in `loop'
9: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:286:in `block in read_io'
8: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:234:in `block (2 levels) in inner_readline'
7: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:234:in `each'
6: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline.rb:235:in `block (3 levels) in inner_readline'
5: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/line_editor.rb:829:in `input_key'
4: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/line_editor.rb:787:in `normal_char'
3: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/line_editor.rb:758:in `process_key'
2: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/line_editor.rb:1109:in `ed_insert'
1: from /Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/unicode.rb:70:in `get_mbchar_width'
/Users/rlaures/.rbenv/versions/2.7.0/lib/ruby/2.7.0/reline/unicode.rb:70:in `encode': "\\xCF" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
rlaures@Chacana i2tm % irb
irb(main):001:0> RUBY_DESCRIPTION
=> "ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin15]"
irb(main):002:0> IRB::VERSION
=> "1.2.1"
irb(main):003:0> Reline::VERSION
=> "0.1.2"
irb(main):004:0>
So I suppose the error is coming from a rebuild of some library with brew.
I try to rebuild the 2.7.0 and check if it works back.
It's worst that I though: This is probably of a remnant of the installation I had on a amd64 mac that came with the restauration mechanism since 2.7.0 don't compile on M1 chips.
I suggest you close that Issue until a new occurence comes with some solid ground :D
I was seeing this on my irb when I had a messed up terminal from some ssh nonsense. Running reset in the shell fixed that which fixed the irb issue as well.
Fixed by https://github.com/ruby/reline/pull/751