12

I want to tell ruby that everything is utf8, except when stated otherwise, so I dont have to place these # encoding: utf-8 comments everywhere.

John Bachir
  • 22,495
  • 29
  • 154
  • 227
grosser
  • 14,707
  • 7
  • 57
  • 61

3 Answers3

16

You can either:

  1. set your RUBYOPT environment variable to "-E utf-8"
  2. or use https://github.com/m-ryan/magic_encoding
tommasop
  • 18,495
  • 2
  • 40
  • 51
  • 1
    #1 is not very portable, and #2 is not very nice, but it is at least automatic :) – grosser May 08 '11 at 05:29
  • 1
    #1 crashes my Ruby keyboard on Windows 10 + Ruby 2.2. ie, as soon as I try to write any accent, the keyboard stops working on the ruby console (except for interrupts). – Cyril Duchon-Doris Jun 04 '16 at 21:26
  • @Cyril Duchon-Doris the answer was for Ruby 1.9 since ruby 2 UTF-8 is the default encoding. – tommasop Jun 05 '16 at 06:47
14

If you're using environment variables, the general way is to use LC_ALL / LANG

Neither is set : fallback to US-ASCII

$ LC_ALL= LANG= ruby -e 'p Encoding.default_external'
#<Encoding:US-ASCII>

Either is set : that value is used

$ LC_ALL=en_US.UTF-8 LANG= ruby -e 'p Encoding.default_external'
#<Encoding:UTF-8>

$ LC_ALL= LANG=en_US.UTF-8 ruby -e 'p Encoding.default_external'
#<Encoding:UTF-8>

Both are set : LC_ALL takes precedence

$ LC_ALL=C LANG=en_US.UTF-8 ruby -e 'p Encoding.default_external'
#<Encoding:US-ASCII>

$ LC_ALL=en_US.UTF-8 LANG=C ruby -e 'p Encoding.default_external'
#<Encoding:UTF-8>
Arne Brasseur
  • 1,468
  • 13
  • 18
0

I just upgraded from 1.9 to 2.0, but for some reason the default external encoding was still set to ASCII. I was able to fix it by typing the following in Terminal:

export RUBYOPT='-E utf-8'