Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Quitar acentos de una cadena de texto

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Jue May 08, 2008 8:00 pm
hugo11ab
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Jul 2006
Mensajes: 31
Quitar acentos de una cadena de texto Responder citando

Que tal de nuevo requiriendo de su valiosa intervención.

¿Cómo puedo quitarle el acento a una cadena de texto? Aquí pongo un ejemplo.
Perl:
my $nombre = "Martín González Gómes";


Quisiera que quedara así:
Perl:
$nombre = "Martin Gonzalez Gomez";


¿Habrá alguna manera de sustituir la vocal acentuada por la vocal sin acento?
Mensaje Vie May 09, 2008 1:09 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
Responder citando

Por fortuna, en Español tenemos pocos acentos y podemos hacer esto:

Perl:
$nombre =~ tr/áéíóúüñçÁÉÍÓÚÜÑÇ/aeiouuncAEIOUUNC/;


Para cosas más complicadas, mejor usar Text::Unaccent::PurePerl.
Mensaje Vie May 09, 2008 9:02 am
hugo11ab
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Jul 2006
Mensajes: 31
Responder citando

Gracias por tu pronta respuesta. La instrucción que me diste funcionó correctamente. Y de nuevo muchas gracias.
Mensaje Mie Nov 19, 2008 3:59 am
dgf
Perlero Nuevo
Perlero Nuevo
Registrado: 19 Nov 2008
Mensajes: 4
Responder citando

Hola,

Yo tengo el mismo problema, quiero quitar los acentos. He intentado con:
Perl:
$nombre =~ tr/áéíóúüñçÁÉÍÓÚÜÑÇ/aeiouuncAEIOUUNC/;

pero me sustituye á por ae, é por ao, í por au, ó por au y u por au.
¿Alguien sabe por qué?

Muchas gracias
Mensaje Mie Nov 19, 2008 4:44 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español, dgf.

Es cosa de la codificación del programa.

Por ejemplo. Yo estoy trabajando con Linux, en una terminal con codificación UTF8
bash:
explorer@joaquin:~> echo $LANG
es_ES.UTF-8

Si ejecuto el programa en línea
bash:
explorer@joaquin:~> perl -le '$x = "Joaquín"; $x =~ tr/áéíóúüñçÁÉÍÓÚÜÑÇ/aeiouuncAEIOUUNC/; print $x'
Joaquaun
me sale el error que comentas. Esto es debido a que cada carácter acentuado que vemos en la variable $x está ocupando dos bytes en el programa. Y por eso tr() hace dos conversiones.

Hay que decirle a Perl que estamos manejando caracteres con codificación utf8, porque, por defecto, Perl piensa que siempre estamos con la codificación iso-8859-1 (latin1):
bash:
explorer@joaquin:~> perl -le 'use utf8; $x = "Joaquín"; $x =~ tr/áéíóúüñçÁÉÍÓÚÜÑÇ/aeiouuncAEIOUUNC/; print $x'
Joaquin


Si, en esa misma terminal, arranco un editor de textos, y le configuro para que trabaje con otra codificación, que sea la iso-8859-1, entonces
Perl:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

my $x = "Joaquín";

$x =~ tr/áéíóúüñçÁÉÍÓÚÜÑÇ/aeiouuncAEIOUUNC/;

print $x;
genera también la salida correcta, debido a que todos los caracteres acentuados que hay dentro del programa están codificados de la misma manera y además pertenecen a la codificación predeterminada de Perl. Si estuviéramos codificando en otra distinta, deberíamos hacer conversiones con otro tipo de módulos, como por ejemplo Encode.

Debes mirar en qué codificación estás trabajando. O usar el módulo indicado antes.
Mensaje Jue Nov 20, 2008 1:52 am
dgf
Perlero Nuevo
Perlero Nuevo
Registrado: 19 Nov 2008
Mensajes: 4
Responder citando

Muchísimas gracias. Tenías razón, era problema de la codificación. Un saludo.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group