publikaccion @publikaccion

viernes, abril 25, 2008

.: Codificar y Decodificar en linux Base64 y UTF8 en Perl


El otro día volví a tener un problema de nuevo con el LDAP del proyecto en el que ando y con el famoso Base64 del OpenLDAP (para más información remitirse a un artículo anterior sobre el mismo tema), y bucenado un poco me encontré con unas instrucciones que a más de uno seguro que le van a sacar del paso en un momento cuando se cuentre con el mismo problema.

El problema viene siendo el mismo de siempre, y es que se pongan entradas en el DN de un LDAP con acentos o caracteres raros, de modo que cuando el LDAP hace un exportación de dicha entrada, nos la muestra como caracteres extraños y no comprensibles. Esto es la codificación en Base64.

Para decodificar dicho galimatías, basta con introducir la siguiente línea de texto en la línea de comandos:

echo | perl -MMIME::Base64 -ne 'print encode_base64($_) . "\n"'


que como ejemplo podría ser:

echo "Esto es un texto con eñes y acentos en las letras áéíóú" | perl -MMIME::Base64 -ne 'print encode_base64($_) . "\n"'


que nos devolvería la cadena de texto:

RXN0byBlcyB1biB0ZXh0byBjb24gZfFlcyB5IGFjZW50b3MgZW4gbGFzIGxldHJhcyDh6e3z+go=


y para volver a decodificar la cadena de Base64 a texto legible para nosotros tendríamos que poner en la línea de comandos Linux:

echo | perl -MMIME::Base64 -ne 'print decode_base64($_) . "\n"'


lo que para nuestro ejemplo sería:

echo "RXN0byBlcyB1biB0ZXh0byBjb24gZfFlcyB5IGFjZW50b3MgZW4gbGFzIGxldHJhcyDh6e3z+go=" | perl -MMIME::Base64 -ne 'print decode_base64($_) . "\n"'


lo que nos devolvería la cadena legible:

Esto es un texto con eñes y acentos en las letras áéíóú

Sin embargo tal y como comentaba en el anterior artículo, además de que OpenLDAP emplea Base64 para codificar los caracteres que no sean estándar (en nuestro caso los ISO Latin1 o ISO-8859-1), también codifica los acentos, eñes, cetillas, diéresis y demás "extraños" del ISO Latin1 en codificación UTF8.

Desde la línea de comandos de linux también tiene fácil solución empleando iconv.

De este modo si tenemos la siguiente cadena de caracteres que queremos codificar a UTF8:

El camión español chocó contra el pingüino en el término de Curação


y la introducimos en un archivo plano TXT que se llame isolatin1.txt empleamos desde la línea de comandos de linux:

iconv -f iso-8859-1 -t utf-8 isolatin1.txt > utfplano.txt


nos meterá en el utfplano.txt como salida la siguiente entrada:

El camión español chocó contra el pingüino en el término de Curação


que es nuestro texto codificado a UTF8.

Para decodificar el UTF8 del archivo utfplano.txt se emplearía sobre la línea de comandos linux:

iconv -f utf-8 -t iso-8859-1 utfplano.txt > isoplano.txt


lo que nos devolvería en nuestro isoplano.txt lo siguiente:

El camión español chocó contra el pingüino en el término de Curação


verificando de este modo que tenemos codificado correctamente el UTF8.

Ahora el texto codificado en UTF8, para transformarlo a Base64 desde línea de comandos sería del tipo:

echo "El camión español chocó contra el pingüino en el término de Curação" | perl -MMIME::Base64 -ne 'print encode_base64($_) . "\n"'


lo que nos devolvería:

RWwgY2FtacOzbiBlc3Bhw7FvbCBjaG9jw7MgY29udHJhIGVsIHBpbmfDvGlubyBlbiBlbCB0w6ly
bWlubyBkZSBDdXJhw6fDo28K


y para verificar que todo ha ido bien, decodificando Base64 a UTF8 sería:

echo "RWwgY2FtacOzbiBlc3Bhw7FvbCBjaG9jw7MgY29udHJhIGVsIHBpbmfDvGlubyBlbiBlbCB0w6lybWlubyBkZSBDdXJhw6fDo28K" | perl -MMIME::Base64 -ne 'print decode_base64($_) . "\n"'


lo que nos devolvería el texto en UTF8:

El camión español chocó contra el pingüino en el término de Curação


De este modo tenemos la transformación ISO Latin1 -> UTF8 -> Base64 que es el texto que finalmente estará en el OpenLDAP si el texto contiene acentos o cedillas o similares.

Para realizar la codificación desde archivos en Base64 (y la decodificación), tendríamos:

perl -MMIME::Base64 -ne 'print encode_base64($_) . "\n"' < utfplano.txt > encodedBase64.txt
perl -MMIME::Base64 -ne 'print decode_base64($_) . "\n"' < encodedBase64.txt > decodedBase64.txt


lo que nos daría como archivos:

utfplano.txt: Nuestro texto castellano formateado en UTF8 con los acentos y demás codificado en UTF8
encodedBase64.txt: Nuestro texto UTF8 codificado a Base64
decodedBase64.txt: Nuestro texto decodificado de Base64 en formato YTF8

Para volver a ver el texto de UTF8 en ISO Latin1 tendríamos:

iconv -f utf-8 -t iso-8859-1 decodedBase64.txt > isoplano.txt


Espero a que a alguien le sirva como me ha servido a mí...

.: Ecoogler, el buscador ecológico


Ecoogler


Tal y como indica en su reseña sobre este buscador:

"Ecoogler es un buscador que utiliza la tecnología de Google y que ayuda a reforestar el amazonas y a preservar los recursos naturales de agua dulce.

Usando Ecoogler se obtienen los mismos resultados, y se ayuda a la asociación benéfica Aquaverde (ONG) fundada en Ginebra, Suiza, en el año 2002.

Esto es posible gracias a un acuerdo con Google y Aquaverde."


Un dato más a tener en cuenta de porqué google está mucho más implicado en acciones sociales que el resto de grandes corporaciones...

jueves, abril 17, 2008

.: Mi nueva adquisición

El otro día leyendo un artículo sobre el nuevo Asus EEE PC (ese que es de 7" con 512 MG de RAM y otras lindeces, en un espacio que opuna lo que viene ocupando un reproductor de DVD portatil), leyendo en los comentarios, alguien hablaba de una pequeña joya, que estando a la misma relación de precio, tenía muchos mejores componentes (aumenta en prácticamente todas las características), y lo mejor de todo, se vendía en España y no venía con esas apestosas licencias de Windows Vista o XP, que parece que todo fabricante que se precie tiene que meter doblada al consumidor, sin opción a desacerse de ella.



Total que investigando un poco y leyendo una serie de referencias y reviews bastante interesantes como la que nos comentan en hispazone me decidí el mismo día en realizar una compra a soloprecios.es y estoy a la espera de que me llegue hoy por paquetería SEUR (los gastos de envío eran sólo 6 euros).

Lo que más me sorprendió de este portatil además de su características:

Procesador y Intel Celeron M540 1.86 GHz.
Intel GL960+ICH8-M Chipset.
Memoria de Sistema 1GB DDR2.
Pantalla 12.1" WXGA.
Módulo de Gráficos y Video Intel GMA X3100, UMA.
Audio compatible con Soundblaster.
Disco Duro 120GB (5400RPM), interfaz SATA.
Unidad Óptica Combo/DVD Super Multi.
Wireless Lan 802.11b / g.
Ranura de tarjetas Express Card x 1.
Salida video (D-Sub, 15-pin).
3 x USB2.0.
Entrada de Micrófono.
Salida para auriculares/SPDIF.
1 x Modem (RJ-11).
1 x Gigabit Ethernet LAN (RJ-45).
1 x IrDa.
1 x entrada de línea.
Batería Li-ion de 8 celdas.
Dimensiones (Ancho x Profundidad x Altura) 303 X 225 X 28-30 mm.
Peso aprox.
1.9KG

es que tiene un batería que da para unas 4 horas de autonomía... y como no el precio que se reduce a 415 euros, además de que es compatible con una serie de sistemas operativos entre los que se incluye Ubuntu y Windows XP... éste último muy probablemente irá en una máquina virtual ya que sus 120GB de disco SATA, dan para muchos experimentos... ;o)

Ya contaré qué tal me fue con él en el momento que lo reciba :oD


portatil msi, asus eee pc

.: Sigo aquí aunque no lo parezca...

Lo cierto es que hace ya tiempo que no escribo nada referente a nada... quizás por pereza, quizás por desidia, pero intentaré ir poniendo alguna cosa de vez en cuando siempre que me sienta con ganas... es lo bueno de tener un blog... que nadie te obliga a escribir salvo tu propio instinto...

technoratiquetas | |