Problema con umlauts al incrustar Discourse en otro sitio web

Como se describe aquí (Embed Discourse comments on another website via Javascript - #453 by limetti), al incrustar Discourse en mi sitio web, el título se analiza correctamente. Pero como contiene umlauts, títulos como “Ich würde” terminan en “Ich würde”.

¿Es este un problema general, un problema con mi página o alguna solución alternativa? ¡Gracias!

Este es un problema clásico de “códec incorrecto”.

Como caso de prueba, si leemos (a través de python, en este ejemplo) los datos brutos de tu publicación:

In [1]: import urllib

In [2]: u = urllib.request.urlopen('https://meta.discourse.org/posts/1418409/raw')

In [3]: r = u.read(); r
Out[3]: b'As described here (https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963/453), when embedding Discourse into my website, the title is correctly parsed. But as it contains umlauts, titles like \\xe2\\x80\\x9cIch w\\xc3\\xbcrde\\xe2\\x80\\x9d end up in \\xe2\\x80\\x9cIch w\\xc3\\x83\\xc2\\xbcrde\\xe2\\x80\\x9d.\\n\\nIs this a general problem, a problem with my page or any workaround for that? Thanks!'

Obtenemos bytes, pero no sabemos cómo decodificarlos. Sin embargo, una de las cabeceras de respuesta nos dice que debemos usar UTF-8:

In [4]: u.headers['content-type']
Out[4]: 'text/plain; charset=utf-8'

In [5]: r.decode('utf-8')
Out[5]: 'As described here (https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963/453), when embedding Discourse into my website, the title is correctly parsed. But as it contains umlauts, titles like “Ich würde” end up in “Ich würde”.\\n\\nIs this a general problem, a problem with my page or any workaround for that? Thanks!'

In [6]: print(r.decode('utf-8'))
As described here (https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963/453), when embedding Discourse into my website, the title is correctly parsed. But as it contains umlauts, titles like “Ich würde” end up in “Ich würde”.

Is this a general problem, a problem with my page or any workaround for that? Thanks!

Notarás que los caracteres se ven exactamente como los publicaste. Pero cuando se produce la interpretación incorrecta de estos bytes, especialmente cuando se comete el error común de interpretar estos bytes como ISO-8859-1 en lugar de UTF-8 (cadena acortada para mayor claridad a continuación), obtienes:

In [7]: snippet = r[220:255]; snippet
Out[7]: b'titles like \\xe2\\x80\\x9cIch w\\xc3\\xbcrde\\xe2\\x80\\x9d end up'

In [8]: snippet.decode('utf-8')
Out[8]: 'titles like “Ich würde” end up'

In [9]: snippet.decode('iso-8859-1')
Out[9]: 'titles like â\x80\x9cIch würdeâ\x80\x9d end up'

Si hago print de eso, mi terminal se cuelga. Salvaje. :smiley:

En resumen: lo que sea que estés usando para extraer los datos de la publicación de Discourse la está tratando como iso-8859-1 en lugar de utf-8.

(Especulando) Quizás estés incrustando los bytes brutos extraídos de un sitio de Discourse en una página que se está sirviendo con una página de códigos iso-8859-1.

3 Me gusta

¡Muchas gracias por la pista! De hecho, la metaetiqueta UTF-8 estaba después de la etiqueta del título :wink:

¡Funciona ahora!

1 me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.