irb icon indicating copy to clipboard operation
irb copied to clipboard

Up arrow raises Encoding::UndefinedConversionError

Open dmlary opened this issue 5 years ago • 5 comments

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

dmlary avatar Mar 05 '20 19:03 dmlary

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)

ShamoX avatar Dec 01 '21 07:12 ShamoX

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?

osyo-manga avatar Dec 01 '21 09:12 osyo-manga

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.

ShamoX avatar Dec 01 '21 12:12 ShamoX

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

ShamoX avatar Dec 01 '21 12:12 ShamoX

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.

benmoss avatar Dec 04 '21 21:12 benmoss

Fixed by https://github.com/ruby/reline/pull/751

tompng avatar Oct 01 '24 17:10 tompng