Vie May 09, 2008 9:02 am
|
 |
hugo11ab
Perlero Nuevo

|
Registrado: 22 Jul 2006
Mensajes: 31
|
|
|
|
|
| Gracias por tu pronta respuesta. La instrucción que me diste funcionó correctamente. Y de nuevo muchas gracias. |
|


Mie Nov 19, 2008 4:44 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|

Jue Nov 20, 2008 1:52 am
|
 |
dgf
Perlero Nuevo

|
Registrado: 19 Nov 2008
Mensajes: 4
|
|
|
|
|
| Muchísimas gracias. Tenías razón, era problema de la codificación. Un saludo. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|