es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo renderizar caracteres en lugar de hexadecimales (\x60)

Tengo un archivo (file.txt) con el siguiente contenido:

file.txt:

+   "Capítulo 8\n“Mucho más que una 'A'”: una colaboración transformadora entre un centro de escritura de escuela secundaria y universidad

<ul>
<li>"Capítulo 9\n“Oh, puedo contar con un poco de ayuda de mis amigos”: colaboraciones de corto plazo entre el centro de escritura y la comunidad"
```</li>
</ul>

Mi código extrae ciertos datos de esto con gawk, y luego escribe los resultados en un nuevo archivo <em>(nav.txt)</em> usando <strong>printf</strong>.

nav.txt:
</code></pre>

Capítulo 8 \xE2\x80\x9CMucho más que una 'A'”: una colaboración transformadora entre un centro de escritura de escuela secundaria y universidad

Capítulo 9 \xE2\x80\x9COh, puedo contar con un poco de ayuda de mis amigos\xE2\x80\x9D: colaboraciones de corto plazo
```

¿Alguien sabe por qué los caracteres especiales (como ‘, -, etc.) se representan como estos extraños códigos hexadecimales? (\xE2\x80\x98A, \xE2\x80\x9D, etc.)

Si es así, ¿cómo puedo mostrar los caracteres correctos en nav.txt, en lugar de sus equivalentes hexadecimales?

Mi código gawk, ejecutándose en Ubuntu:
gawk
gawk '
match($0, /^[|+-]."([^"]+)".#([[:digit:]]+)/, m) {
printf "<li>\n <a href=\"mybook%04d.xhtml\">%s</a>\n </li>\n", m[2], m[1] >> "nav.txt"
}
' file.txt

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Los extraños códigos hexadecimales son en realidad la codificación UTF-8 de los caracteres especiales. Esto ocurre cuando la terminal o el editor de texto utilizado para ver los archivos no tienen un soporte adecuado para UTF-8.

    Para mostrar los caracteres correctos en nav.txt, necesitamos especificar la codificación al escribir el archivo. Podemos hacer esto usando el comando iconv.

    Aquí está el código modificado:

    gawk '
        match($0, /^[\|\+-].*"([^"]+).*#([[:digit:]]+)/, m) {
            cmd = "echo -n \""m[1]"\" | iconv -t UTF-8//IGNORE"
            cmd | getline title
            printf "<li>\n     <a href="\"mybook%04d.xhtml\"">%s</a>\n    </li>\n", m[2], title >> "nav.txt"
            close(cmd)
        }
    ' file.txt
    

    En este código, estamos utilizando el comando iconv para convertir la cadena de entrada (m[1]) desde la codificación actual a UTF-8. La cadena convertida se utiliza luego en la instrucción printf.

    Ten en cuenta que la opción IGNORE se usa con iconv para ignorar cualquier carácter inválido en lugar de detener el proceso de conversión.

Comments are closed.