Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Problema convirtiendo nombre de archivo. Código de página
#1

Buenas!.

Un grupo de nombres de los archivo que aparecían en un ebook que tengo por aquí mostraba caracteres raros.
Las tildes. Decidí convertir el nombre a otros códigos de página, pero no parece un nombre de archivo con sentido al convertir el código de página. Sad

Adjunto el código del programa y el ejemplo para poder intentar solucionar el problema.
Utilizo para ello distintas codificaciones de página que me genera el comando iconv.

GAMBAS
  1. Private cuentafilas As Integer
  2.  
  3. Public Sub Form_Open()
  4.  
  5.   With grdTabla
  6.     .Header = GridView.Both
  7.     .Columns.Count = 3
  8.     .Rows.Count = 0
  9.     .Columns[0].Title = "Texto original"
  10.     .Columns[0].W = 350
  11.     .Columns[1].Title = "Codificación"
  12.     .Columns[1].w = 150    
  13.     .Columns[1].Alignment = Align.Center
  14.     .Columns[2].Title = "Texto convertido a UTF-8"
  15.     .Columns[2].W = 350
  16.     .Columns[2].Alignment = Align.Center
  17.  
  18.  
  19. Public Sub rellenarGridView(nombrefichero As String, datos As String[])
  20.  
  21.   Dim jc As String
  22.   Dim conversion As String
  23.  
  24.   For Each jc In datos
  25.     grdTabla.Rows.Count = cuentafilas + 1
  26.     grdTabla[cuentafilas, 0].Alignment = Align.Left
  27.     grdTabla[cuentafilas, 0].Text = nombrefichero
  28.     grdTabla[cuentafilas, 1].Alignment = Align.Center
  29.     grdTabla[cuentafilas, 1].Text = jc
  30.     grdTabla[cuentafilas, 2].Alignment = Align.Center    
  31.     Try conversion = Conv(nombrefichero, jc, "UTF-8")
  32.     If Not IsNull(conversion) Then grdTabla[cuentafilas, 2].Text = conversion        
  33.     If Error Then
  34.       'No cuentes fila
  35.       Continue
  36.     Else
  37.       cuentafilas += 1
  38.     Endif    
  39.   Next
  40.   Label1.Text = "Total de conversiones: " & Str(cuentafilas + 1)
  41.  
  42.  
  43. Public Sub Button1_Click()
  44.  
  45.   Dim archivo As String
  46.   Dim juegodec As New String[]
  47.   Dim tiposdecodificacion As String  
  48.  
  49.   'conv de gambas es un intermediario del comando iconv del sistema  
  50.   'pasamos todos los códigos de página que existe a la variable
  51.   Try Exec ["iconv", "--list"] To tiposdecodificacion
  52.  
  53.   'Copiado y pegado directamente el nombre del archivo en el editor de Gambas
  54.   'No puedo pasar el archivo, ya que no tengo seguridad si es libre
  55.   archivo = "Benito P‚rerz Gald¢s - Los Ayacuchos.epub"
  56.  
  57.   juegodec = Split(tiposdecodificacion, "\n", "//", True)    
  58.   rellenarGridView(archivo, juegodec)
  59.    
  60.    'Esto salta siempre al final. No sé si es un error que viene del relleno del gridview
  61.    'He tenido que anular su ejecución
  62.   'If Error Then Message.Warning("No tienes instalado iconv en tu sistema!")
  63.  



Si, la lista es larga. A ver si podéis ayudar con la manipulación de errores. Shy

Saludos


Archivos adjuntos
.gz ConversionCodigoDePaginaNombreArchivo-0.0.1.tar.gz Tamaño: 12.77 KB  Descargas: 2

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#2

Así se muestra en el listado del comando ls:
Cita:Benito P'$'\302\202''rerz Gald¢s - Los Ayacuchos.epub

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#3

Lo primero que me ha llamado la atención es que dispone el sistema (al menos el mío) de 1.178 codificaciones y en el gridview sólo me aparecen 656. Así que he modificado tu código para que me salgan todos:
GAMBAS
  1. Private cuentafilas As Integer
  2.  
  3. Public Sub Form_Open()
  4.  
  5.   With grdTabla
  6.     .Header = GridView.Both
  7.     .Columns.Count = 3
  8.     .Rows.Count = 0
  9.     .Columns[0].Title = "Texto original"
  10.     .Columns[0].Alignment = Align.Left
  11.     .Columns[0].W = 350
  12.     .Columns[1].Title = "Codificación"
  13.     .Columns[1].w = 150
  14.     .Columns[1].Alignment = Align.Center
  15.     .Columns[2].Title = "Texto convertido a UTF-8"
  16.     .Columns[2].W = 350
  17.     .Columns[2].Alignment = Align.Center
  18.  
  19.  
  20. Public Sub rellenarGridView(nombrefichero As String, datos As String[])
  21.  
  22.   Dim jc As String
  23.   Dim conversion, s As String
  24.  
  25.   grdTabla.Rows.Count = datos.count
  26.   For n = 0 To datos.max
  27.     grdTabla[n, 0].Text = nombrefichero
  28.     grdTabla[n, 1].Text = datos[n]
  29.     Try conversion = Conv(nombrefichero, datos[n], "UTF-8")
  30.     If Error Then
  31.       conversion = Error.Text
  32.     Else
  33.       Inc cuentafilas
  34.     Endif
  35.     grdTabla[cuentafilas, 2].Text = conversion
  36.   Next
  37.   Label1.Text = "Total de conversiones: " & Str(cuentafilas + 1)
  38.  
  39.  
  40. Public Sub Button1_Click()
  41.  
  42.   Dim archivo As String
  43.   Dim juegodec As New String[]
  44.   Dim tiposdecodificacion As String
  45.  
  46.   'conv de gambas es un intermediario del comando iconv del sistema
  47.   'pasamos todos los códigos de página que existe a la variable
  48.   Try Exec ["iconv", "--list"] To tiposdecodificacion
  49.  
  50.   'Copiado y pegado directamente el nombre del archivo en el editor de Gambas
  51.   'No puedo pasar el archivo, ya que no tengo seguridad si es libre
  52.   archivo = "Benito P‚rerz Gald¢s - Los Ayacuchos.epub"
  53.  
  54.   juegodec = Split(tiposdecodificacion, "\n", "//", True)
  55.   rellenarGridView(archivo, juegodec)
  56.  
  57.   'Esto salta siempre al final. No sé si es un error que viene del relleno del gridview
  58.   'He tenido que anular su ejecución
  59.   'If Error Then Message.Warning("No tienes instalado iconv en tu sistema!")
  60.  


Pero esto no soluciona el problema, sólo te indica qué conversiones generaron error y cuales generaron cadenas inimprimibles (las que están en blanco).
Creo que partes de un supuesto erróneo: El nombre de archivo responde a una codificación concreta. Creo que el nombre del archivo es el resultado de una conversión errónea, por lo que no tiene nada que ver con ninguna en concreto. Es decir, alguien lo creó con acentos, alguien se encontró con que no le salían y trató de convertirlos, con lo que convirtió un caracter extraño en otro caracter extraño distinto y ese segundo par de caracteres extraños es el que se quedó por no ser convertibles.
A mí pasó algo así hace mucho tiempo con un puñado de archivos .pdf importados de la red. Me volvieron loco y al final tuve que, simplemente, eliminar todo caracter extraño de los nombres de archivos. Mejor Benito Prez Galds que nada... o no.

Saludos

No podemos regresar
    ¡Gracias!
#4

Puedes hacerlo con un bucle for each. Wink
El row.count lo deje dentro para que solo contase las visibles.
 
(17-07-2022, 19:23)Shordi escribió:  Lo primero que me ha llamado la atención es que dispone el sistema (al menos el mío) de 1.178 codificaciones y en el gridview sólo me aparecen 656. Así que he modificado tu código para que me salgan todos:

Si que tiene más, solo que me interesaban más las se pueden imprimir. Si no puedo verlas.
 
(17-07-2022, 19:23)Shordi escribió:  Pero esto no soluciona el problema, sólo te indica qué conversiones generaron error y cuales generaron cadenas inimprimibles (las que están en blanco).

Más bien trata de mostrar la conversión directamente con todas las que sean imprimibles. Una vez vista, usar la más adecuada para el comando conv
de Gambas. Como no tengo ni la más remota idea de cual es el código de página.
 
(17-07-2022, 19:23)Shordi escribió:  Creo que el nombre del archivo es el resultado de una conversión errónea, por lo que no tiene nada que ver con ninguna en concreto. Es decir, alguien lo creó con acentos, alguien se encontró con que no le salían y trató de convertirlos, con lo que convirtió un caracter extraño en otro caracter extraño distinto y ese segundo par de caracteres extraños es el que se quedó por no ser convertibles.

Vaya forma de hacerlo. Sad
 
(17-07-2022, 19:23)Shordi escribió:  A mí pasó algo así hace mucho tiempo con un puñado de archivos .pdf importados de la red. Me volvieron loco y al final tuve que, simplemente, eliminar todo caracter extraño de los nombres de archivos. Mejor Benito Prez Galds que nada... o no.

No tiene por que ser siempre así, prueba a tener una máquina virtual de Windows para asegurarte.
Ahora te cuento el motivo. Al final he usado el archivo zip que contiene los autores de la A -> B

Te muestro una captura de "Engrampa" (un parte). Es el gestor de archivos que usa Linux Mint Mate.
Hice lo mismo con el comando "unzip  -l" y lo muestra igual.

[Imagen: mqbHJQ0.png]

Con Aristóteles igual.

Ahora arranco la máquina virtual que tengo por aquí de un viejo xp y ojo con el resultado.
Esta usando el compresor que tenía por defecto el xp.

[Imagen: mbNxUF1.png]

Aparece bien las tildes. De alguna forma se ve en Windows. No debe estar tan mal el archivo.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#5

Pc real: Linux
Pc virtual: Windows Xp.

(Eso de pc real y virtual se dice de otra forma), El host y la máquina invitada o algo así.

Activo el portapales compartido (usando la opción bidireccional) y arrastre en los menús ( igual, bidireccional) de la máquina virtual, del menú dispositivos.
Desde el explorador de Windows arrastro al explorador de Linux el directorio que contiene los archivos de Pérez Galdós.

[Imagen: 8AfmIkG.png]

Esto seguramente se podrá hacer de alguna forma desde Linux directamente.
Partiendo del zip incluso donde se encuentran los libros, o con un solo archivo.

Lo cierto es que el comando unzip incorpora la opción
 
Cita: 
 -O CHARSET  specify a character encoding for DOS, Windows and OS/2 archives
  -I CHARSET  specify a character encoding for UNIX and other archives

Y además:
-U  use escapes for all non-ASCII Unicode 
-UU ignore any Unicode fields

Suelo encontrarme la resolución del problema con más facilidad con los archivos de texto. Eso incluso se puede abrir con un editor como SublimeText y convertirlo.
Como nota curiosa los archivos de Python ( que no es más que un archivo de texto) "solían" llevar en su parte superior, si era UTF-8 u otro. Entonces si no usabas
la instrucción adecuada para esto y su codificación de página, no se podía usar las tildes y la eñe. Pero parece que los editores modernos se lo saltan de alguna forma.
Eso no quiere decir que luego en otro editor de programación pueda ocurrir el problema.

Cosas de la codificación de los caracteres.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje
Último mensaje por tincho
08-10-2020, 23:15

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)