Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: cron0ar8R en 15 Junio 2013, 19:13 pm



Título: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: cron0ar8R en 15 Junio 2013, 19:13 pm
Hola a todos,

Alguien sabría como crear un script que me convierta un conjunto de archivos de texto en ANSI a UTF-8? No hay que hacer nada más, solo cambiar la codificación.

veréis, tengo unos archivos m3u en formato ansi y necesito pasarlos a utf-8 para que me funcionen en un teléfono chino que no acepta caracteres ansi.

lo que pasa es que cada vez que sincronizo el teléfono tengo que re-codificar a utf-8 para que me funcionen las listas. notepad++ puede hacer la conversión de ansi a utf8 pero tengo que hacerlo uno a uno, por eso prefiero un script.

la idea seria copiar el script dentro de la carpeta donde están todas las listas de reproducción con extensión m3u y luego ejecuto el script y me las pasa todas al formato correcto.

alguien sabe como hacerlo? imagino que solo es una o dos lineas de código pero yo no domino este campo...


Gracias y un saludo


Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: Eleкtro en 15 Junio 2013, 19:36 pm
¿En que lenguaje?.


Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: cron0ar8R en 15 Junio 2013, 20:00 pm
gracias por responder elektro!
pues me da igual el lenguaje, solo quiero ejecutarlo desde windows... imagino que eso será un .bat que se puede editar con el notepad  :P


Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: Eleкtro en 16 Junio 2013, 23:40 pm
imagino que eso será un .bat que se puede editar con el notepad  :P
Pues no amigo, en Batch podrías hacerlo a utf-16, pero a utf-8 no.

Por eso la pregunta, ¿de que lenguajes de scripting dispones instalados en tu máquina? xD, en python y ruby es muy fácil.

En VBS sería así:

Código
  1. Set stream = CreateObject("ADODB.Stream")
  2.  
  3. With stream
  4. .Open
  5. .Type     = 2
  6. .Position = 0
  7. .Charset  = "utf-8"
  8. .WriteText CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0), 1).ReadAll
  9. .SaveToFile WScript.Arguments(1), 2
  10. .Close
  11. End With
  12.  
  13. Wscript.Quit(0)

Lo he codeado para que puedas pasarle argumentos, de esta manera:
Código
  1. Script.vbs "Archivo ANSI.txt" "Nuevo archivo UTF-8.txt"

Puedes hacer un For en Batch para recorrer todos los archivos de texto:
Código
  1. For %%X in ("*.txt") Do (Script.vbs "%%X" "UTF-8 %%X")

...O puedes usar aplicaciones commandline para convertir entre las distintas codificaciones de texto, como por ejemplo "iconv", o "stringconverter", y usar el FOR que te he mostrado pero con la aplicación que vayas a usar.

Saludos.


Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: cron0ar8R en 17 Junio 2013, 17:13 pm
Hola de nuevo Elektro, gracias por el código.

A ver, no estoy muy documentado que digamos xD

No tengo ningún compilador instalado en mi maquina más allá del de java.

Desconozco si puedo ejecutar ese código directamente o no, no soy programador, solo sé algo de C y hace años que lo toco.

Lo que yo tengo son un conjunto de archivos con extensión .m3u cada uno con un nombre "cualquiera". Entonces, solo quiero un script o aplicativo que me recorra todos los archivos .m3u y que me los guarde con la codificación UTF-8.

Entonces, este código que me has pasado es un script de visual basic, no? entiendo que no necesito instalarme ningún compilador entonces. Dicho esto, qué hago? lo copio en el notepad y lo guardo con extensión .vbs? y el otro código lo guardo como .bat? está listo para ejecutar? o tengo que hacer algo extra?

Creo que en mi caso sería así, no?

  
Código:
For %%X in ("*.m3u") Do (Script.vbs "%%X" "UTF-8 %%X")

Igualmente, voy a probar a ver si funciona...

perdón por preguntar chorradas pero es que no soy del ramo... :D

Un saludo!


Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: cron0ar8R en 17 Junio 2013, 17:25 pm
Hola de nuevo,

Acabo de probar sin éxito el código. Creo que algo hago mal...

lo que he hecho es crear dos archivos. Uno .vbs y otro .bat.

El .vbs he copiado "a saco" esto:

Código:
Set stream = CreateObject("ADODB.Stream")
    
With stream
    .Open
    .Type     = 2
    .Position = 0
    .Charset  = "utf-8"
    .WriteText CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0), 1).ReadAll
    .SaveToFile WScript.Arguments(1), 2
    .Close
End With
    
Wscript.Quit(0)


Y en el .bat he copiado esto:
Código:
For %%X in ("*.m3u") Do (Script.vbs "%%X" "UTF-8 %%X")

Entonces, he copiado los dos archivos en la carpeta de las playlist. En esa carpeta solo hay 14 archivos .m3u. Después del proceso, según notepad++, continúan siendo ANSI.


A ver si me puedes echar otro cable campeón! xD  ;D

Gracias y un saludo


Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: cron0ar8R en 20 Junio 2013, 15:28 pm
perdón por preguntar chorradas pero es necesario que instale algún compilador para que me funcione? o simplemente lo guardo con extensión .vbs y lo ejecuto? es que he hecho eso y no me va. Creo que hago algo mal, a ver si alguien me puede echar una manita  :D

gracias otra vez




Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: Eleкtro en 20 Junio 2013, 16:17 pm
Después del proceso, según notepad++, continúan siendo ANSI.
¿Y que te dice el Notepad de toda la vida?

Verifiqué que el código era correcto, convierte archivos ANSI a UTF-8.

No existe compilador para VBS, lo estás ejecutando corréctamente.

Prueba a llamarlo diréctamente desde la CMD:
Código:
wscript.exe "Script.vbs" "archivo ansi.txt" "nuevo archivo UTF-8.txt"

...Y comprueba la codificación del nuevo archivo.

Saludos!


Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: cron0ar8R en 20 Junio 2013, 16:22 pm
gracias por responder electro. Al intentar ejecutarlo desde el cmd me sale esto:
Código:
---------------------------
Windows Script Host
---------------------------
No existe ningún motor de secuencia de comandos para la extensión de archivo ".vbs".

---------------------------
Aceptar  
---------------------------



he ejecutado exactamente el mismo código que me has puesto sin cambiar nada. o sea,

Código:
wscript.exe "Script.vbs" "archivo ansi.txt" "nuevo archivo UTF-8.txt"



[MOD:] No hagas doble post en 60 segundos :-/


Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: Eleкtro en 20 Junio 2013, 22:05 pm
gracias por responder electro. Al intentar ejecutarlo desde el cmd me sale esto:
hmmm...

La verdad es que no encuentro información al respecto sobre ese extraño error.

¿Usas un Windows modificado? (Lease Windows SuperLite, etc)

En lugar de usar "wscript.exe" en el código que te dije, prueba con "cscript.exe", ¿Te funciona?.

Me parece que algo falla en tu WScript, prueba a repararlo con estos tres comandos diréctamente en la CMD:

Código:
regsvr32 VBScript
assoc .vbs=VBSFile
Ftype VBSFile="%SystemRoot%\System32\WScript.exe" "%1" %*


Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: cron0ar8R en 20 Junio 2013, 22:14 pm

si ejecuto esto:
Código:
cscript.exe "Script.vbs" "archivo ansi.txt" "nuevo archivo UTF-8.txt"

obtengo esto:
Citar
D:\Bandeja Entrada\Soft\Pasar M3U de ANSI a UTF-8\Soft>cscript.exe "Script.vbs"
"archivo ansi.txt" "nuevo archivo UTF-8.txt"
Microsoft (R) Windows Script Host versión 5.8
Copyright (C) Microsoft Corporation 1996-2006. Reservados todos los derechos.

Error de entrada: No existe ningún motor de secuencia de comandos para la extens
ión de archivo ".vbs".

D:\Bandeja Entrada\Soft\Pasar M3U de ANSI a UTF-8\Soft>

Uso windows 7 x64 con todas las updates hasta el día de hoy. Es la versión original sin ninguna modificación (lo he verificado con SHA1).

Ahora voy a probar de hacer la reparación en el registro con el otro código que me has puesto.


Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: cron0ar8R en 20 Junio 2013, 22:18 pm
Al ejecutar el código de reparación que me has puesto, ocurre lo siguiente.

Si ejecuto esto:

Código:
wscript.exe "Script.vbs" "archivo ansi.txt" "nuevo archivo UTF-8.txt"

Obtengo esto:

Código:
---------------------------
Windows Script Host
---------------------------
Secuencia de comandos: D:\Bandeja Entrada\Soft\Pasar M3U de ANSI a UTF-8\Soft\Script.vbs
Línea: 1
Carácter: 1
Error: Carácter no válido
Código: 800A0408
Origen: Error de compilación de Microsoft VBScript

---------------------------
Aceptar   
---------------------------


Ahora, si ejecuto esto:

Código:
cscript.exe "Script.vbs" "archivo ansi.txt" "nuevo archivo UTF-8.txt"

obtengo otra vez esto:


Citar
D:\Bandeja Entrada\Soft\Pasar M3U de ANSI a UTF-8\Soft>cscript.exe "Script.vbs"
"archivo ansi.txt" "nuevo archivo UTF-8.txt"
Microsoft (R) Windows Script Host versión 5.8
Copyright (C) Microsoft Corporation 1996-2006. Reservados todos los derechos.

D:\Bandeja Entrada\Soft\Pasar M3U de ANSI a UTF-8\Soft\Script.vbs(1, 1) Error de
 compilación de Microsoft VBScript: Carácter no válido


D:\Bandeja Entrada\Soft\Pasar M3U de ANSI a UTF-8\Soft>


esto es un expediente X. Algo raro pasa. Uso el antivirus AVG. Tendrá algo que ver?


Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: Eleкtro en 20 Junio 2013, 22:27 pm
Algo raro pasa. Uso el antivirus AVG. Tendrá algo que ver?
Olvida los virus.

Citar
Código:
Script.vbs(1, 1) Error decompilación de Microsoft VBScript: Carácter no válido

Te está diciendo que el problema está en el caracter número 1 de la línea número 1,
Ese error solo puede deberse a una de estas dos razones:

1. Has modificado el código y has agregado un caracter no valido al principio del código.
2. Has guardado el script en una codificación distinta a ANSI, y no reconoce el primer caracter del texto porque se ha convertido a UTF-8(por ejemplo)

Asegúrate de guardar el script.vbs en codificación ANSI.

Saludos!


Título: Re: Necesito un script para convertir un conjunto de TXT-ANSI a TXT UTF-8!
Publicado por: cron0ar8R en 20 Junio 2013, 22:34 pm
joder a la primera! eres un crack! jejeje

el problema era que mi notepad++ estaba configurado para que todos los TXT nuevos que creara lo hiciera con UTF8, por eso copié tu script sobre un fichero que estaba en UTF8. Al guardarlo en formato ANSI ha funcionado genial.

Muchas gracias!!!!!!!!

PD he puesto esto para que me los re-escriba en lugar de crear archivos nuevos. parece que funciona...

Código:
For %%X in ("*.m3u") Do (Script.vbs "%%X" "%%X")