Caracteres con acento, ñ y demás. Cómo usarlos en Ruby?

2,159 views
Skip to first unread message

Matias Mascazzini

unread,
Jan 7, 2013, 3:46:14 PM1/7/13
to rub...@googlegroups.com
Hola,
jugando con ruby estaba haciendo la letra de la canción de los Elefantes y la tela de araña me tiraba el error de "invalid multibyte char (US-ASCII)", obviamente lo mismo con los acentos. Googleando un poco sólo encontré de respuesta "No se puede".

¿Cómo trabajan en Ruby cuando necesitan acentuar palabras o usar caracteres como la ñ?

Aparentemente los caracteres validos serían estos:
#Caracteres UTF-8
('0'..'127').each do |numero|
    puts (numero.to_i).chr
end


Saludos
Matías Mascazzini

Corrientes, Argentina

PD: y se va la primera...

Me encuentras en:
LinkedIn: http://ar.linkedin.com/in/matiasmasca/es
Twitter: @matiasmasca
ComunidadTIC: @matiasmasca
---------
Le recomiendo visitar: www.ComunidadTIC.com.ar
"¿Eres Informático?"

geronimo diaz

unread,
Jan 7, 2013, 4:00:11 PM1/7/13
to rub...@googlegroups.com
proba poniendole al inicio del archivo:

 # encoding: utf-8 

Saludos.

--
Geronimo Diaz
Ruby/RoR Developer

David Botía

unread,
Apr 8, 2015, 6:46:51 AM4/8/15
to rub...@googlegroups.com
Gracias, estoy aprendiendo Ruby pues me encanta su filosofía y encuentro éste tema de los acentos y la ñ complicado.

Trabajando en Windows, con un programa *.rb creado con Geany en UTF-8, una versión de Ruby que es la 2.2.1 y poniendo esa línea de # encoding:  utf-8 al principio... me sigue saliendo el error con esos caracteres.

Agradezco mucho encontrar a personas interesadas de habla hispana.

Matias Mascazzini

unread,
Apr 8, 2015, 8:09:31 AM4/8/15
to rubysur
Hola David,
poner # encoding: utf-8 al inicio del archivo debería bastar, luego de la versión 2.0 de Ruby ese ya no debería ser un problema.

Sería mejor que nos muestres el mensaje de error y el código que estas usando, tal vez es otra cosa.

El código Ruby al ser interpretado lo puedes crear desde el blog de notas si quieres, yo prefiero el editor SublimeTex.




Saludos
Matías Mascazzini

Corrientes, Argentina

David Botía

unread,
Apr 9, 2015, 2:54:42 AM4/9/15
to rub...@googlegroups.com
Verás Matías, el programa es éste que pego a continuación, en Ubuntu con ruby 2.1.2 va bien pero en Windows con la versión 2.2.1p85, no, en cuanto escribo, por ejemplo, varón como respuesta a la pregunta de ¿cuál es tu sexo?, me da el error:

Incompatible character encodings: UTF-8 and CP850 <Encoding::CompatibilityError>

--------------------  Éste es el programilla ------------------------------------------
#encoding: utf-8
 
class Persona
  def initialize(nombre, edad, sexo)
    @nombre = nombre
    @edad = edad
    @sexo = sexo
  end
  
  attr_accessor :nombre, :edad, :sexo
  
  end
 
puts "¿Cómo te llamas? "
$stdout.flush
llamas = gets.chomp

puts "¿Cúal es tu edad? "
$stdout.flush
tiempo = gets.chomp.to_s

puts "¿Cúal es tu sexo? "
$stdout.flush
s = gets.chomp


puts
puts "Te llamas: #{llamas}, tu edad es #{tiempo.to_s} años y tu sexo es #{s}"
puts "Todavía no eres un objeto"
puts "Ahora, te haré objeto de la clase persona y te identificarás con la letra a"
a = Persona.new(llamas, tiempo, s)
puts "desde ya "+" --- a --- "+" es una ------> #{a.class}"
puts "Los métodos de a son:"
print a.methods
puts
puts
puts "como ves tiene, entre otros, los métodos creados por mi que son ---> nombre, edad y sexo" 
puts "El nombre de a es: ---- #{a.nombre} ---"
puts "para asignarle el nombre que antes me has introducido hacemos ésto: a.nombre = llamas"
a.nombre = llamas
puts a.nombre
puts "y ahora el nombre de a es: ---- #{a.nombre} ---"
puts "La edad de a es: ---- #{a.edad} ---"
puts "y el sexo de a es: ---- #{a.sexo} ---"
puts "para asignarle la edad y sexo que antes me has introducido"
puts "Introducimos a.edad = tiempo"
a.edad = tiempo
puts "e introducimos el sexo a.sexo= s"
a.sexo = s
puts "y ahora el nombre de a es: ---- #{a.nombre} ---, la edad de a es --- #{a.edad}--- y el sexo es #{a.sexo}" 

puts
puts "esto es todo"
puts
puts
puts
--------------------------------------------------------

Yo creo que tiene que ver con el PC más que con el Encoding, pero, ¿no debería servir así para cualquier PC?.
Gracias. Esto es todo.

El lunes, 7 de enero de 2013, 21:46:14 (UTC+1), Matias Mascazzini (Corrientes) escribió:

Luis Lavena

unread,
Apr 9, 2015, 7:32:10 AM4/9/15
to rub...@googlegroups.com

Hola David,

Tu consola está usando una tabla de caracteres que no soporta la conversión de utf8 al codepage 850:

Incompatible character encodings: UTF-8 and CP850 <Encoding::CompatibilityError>

Busca en Google como cambiar el codepage a 1252 y debería resolver el problema que estás teniendo.

Sorry for top posting. Sent from mobile.

--
Has recibido este mensaje porque estás suscrito al grupo "rubysur" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a rubysur+u...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Emanuel Friedrich

unread,
Apr 9, 2015, 7:43:23 AM4/9/15
to rub...@googlegroups.com
Trata de escribir una ñ en el command line de windows y fijate que no vas a poder ;).

Es el encoding de tu terminal/consola.

Ahora, trata de mandar una ñ a un archivo, y vas a poder

file = File.new("archivo.txt", 'w')
file.puts("ñoño")
file.close


--
Emanuel Friedrich - Casi licenciado en Sistemas... :)
Cel: 3754-495887

Haya paz

Luis Lavena

unread,
Apr 9, 2015, 12:05:52 PM4/9/15
to rub...@googlegroups.com
2015-04-09 8:43 GMT-03:00 Emanuel Friedrich <aemanuel...@gmail.com>:
Trata de escribir una ñ en el command line de windows y fijate que no vas a poder ;).


No se si es real el comentario o chiste, pero una ñ o acentos si funcionan, solo que con el codepage 850 no serán correctamente interpretados por el default encoding de Ruby 2.2 que es UTF8

Necesitas un codepage que si tenga conversión a UTF8, como 1252 o mejor aun Unicode (65001)

Para mas info:


850: el codepage de DOS
1252: Latin 1 (windows-1252)
65001: Unicode UTF8

Para cambiar el codepage en la consola se usa `chcp`, si queres cambiar de manera permanente, google is you friend :)

Saludos,
-- 
Luis Lavena
AREA 17
-
Perfection in design is achieved not when there is nothing more to add,
but rather when there is nothing more to take away.
Antoine de Saint-Exupéry

David Botía

unread,
Apr 9, 2015, 1:08:16 PM4/9/15
to rub...@googlegroups.com
Gracias por los aportes. En cuanto pueda lo pruebo.

Emanuel Friedrich

unread,
Apr 9, 2015, 5:34:52 PM4/9/15
to rub...@googlegroups.com
medio real. Estaba en el xp de mi laburo (si, xp, por tener un ide COBOL ireemplazable ) y no puedo tipear una enie, ni acentos.

Con el 1252 (no conocia chcp, gracias Luis).

Hoy a las apuradas trate de tipear la enie con el 65001 y no se si no lo tenia por mi version de XP SP3 o si lo tenia y no funcionaba. por otra razon. 

Ahora, probe en un windows SEVEN y escribo enies... Perdon por el comentario erroneo. Puedo Con el codepage 850, que segun veo en lo que pasaste


OEM Multilingual Latin 1; Western European (DOS)

Thanks..

--
Has recibido este mensaje porque estás suscrito al grupo "rubysur" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a rubysur+u...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Rafael Bidegain

unread,
Apr 10, 2015, 8:26:31 AM4/10/15
to rubysur
perdón por engancharme en un off-topic

El 9 de abril de 2015, 18:34, Emanuel Friedrich <aemanuel...@gmail.com> escribió:
medio real. Estaba en el xp de mi laburo (si, xp, por tener un ide COBOL ireemplazable ) y no puedo tipear una enie, ni acentos.
cada tanto tengo que hacer algún ajuste a programas cobol... ¿cual es el ide que usas? yo solo uso un editor de texto y una versión bastante vieja (ultraedit)

saludos
--
Rafael Bidegain

Ya que los cuerdos no hablan, hablará el loco.
(The Fool, Padraic Pearse)

# yo quiero educación libre. ¡YA!

IgorJorobus

unread,
Apr 11, 2015, 9:37:26 AM4/11/15
to rub...@googlegroups.com
 Pensé que el codepage de la consola no se podía cambiar, tanto tiempo dando por sentado olvidarme de ver un acento o ñ en la consola y ahora Luis viene a hechar luz, jaja. Gracias Luis.

IgorJorobus

unread,
Apr 11, 2015, 9:43:41 AM4/11/15
to rub...@googlegroups.com
 Solución para establecer por defecto en Windows un determinado encoding para el cmd(leer el post entero) => http://superuser.com/questions/269818/change-default-code-page-of-windows-console-to-utf-8 

IgorJorobus

unread,
Apr 11, 2015, 9:50:42 AM4/11/15
to rub...@googlegroups.com
 Si no les aparece la key "Autorun" agregenle a "Command Processor" una del tipo "Valor de cadena múltiple" y asígnenle el valor "chcp 1252", y listo, ya pueden imprimir "ñoqui".

Luis Lavena

unread,
Apr 11, 2015, 6:52:02 PM4/11/15
to rub...@googlegroups.com

Te recomiendo no crear el key autorun, algunas versiones de Ruby tienen problemas al largar subprocesos, causando que instalar gemas fallen.

Más sobre esto en el wiki de rubyinstaller.

Sorry for top posting. Sent from mobile.

--

IgorJorobus

unread,
Apr 11, 2015, 8:22:19 PM4/11/15
to rub...@googlegroups.com
Rollback entonces! De todas maneras es tan simple como agregar una línea de código en tu script Ruby: `chcp 1252` .

Luis Lavena

unread,
Apr 13, 2015, 11:29:35 AM4/13/15
to rub...@googlegroups.com
2015-04-11 21:22 GMT-03:00 IgorJorobus <gonzale...@hotmail.com>:
Rollback entonces! De todas maneras es tan simple como agregar una línea de código en tu script Ruby: `chcp 1252` .


Yo te recomendaria no hacer eso, ya que chcp, a diferencia de otros comandos, altera no solo el proceso que estas ejecutando, sino el proceso padre (cmd.exe) completo, lo que puede llevar a que otro proceso se vea afectado por este cambio.

Lamentablemente las respuestas de superuser no son la mejor referencia: 

Changing HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP value to 65001 appear to make the system unable to boot in my case.

Hay que hacer incapié en "in my case", eso no signifca que haya fallado a otros.

Lo que si estoy por demás seguro es que la modificación de Autorun trae mas problemas que soliciones.

Sano consejo: modifica OEMCP y ACP con 1252 y santo remedio.

IgorJorobus

unread,
Apr 18, 2015, 8:48:20 AM4/18/15
to rub...@googlegroups.com
 Gracias Luis.
Reply all
Reply to author
Forward
0 new messages