Problème avec les umlauts lors de l'intégration de Discourse sur un autre site web

Comme décrit ici (Embed Discourse comments on another website via Javascript - #453 by limetti), lors de l’intégration de Discourse sur mon site web, le titre est correctement analysé. Mais comme il contient des umlauts, des titres comme « Ich würde » finissent par « Ich würde ».

Est-ce un problème général, un problème avec ma page ou existe-t-il une solution de contournement ? Merci !

C’est un problème classique de « mauvais codec ».

À titre d’exemple, si nous lisons (via python, dans cet exemple) les données brutes de votre message :

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!'

Nous obtenons des octets, mais nous ne savons pas comment les décoder. Cependant, l’un des en-têtes de réponse nous indique que nous devrions utiliser 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!

Vous remarquerez que les caractères ressemblent exactement à ceux que vous avez postés. Mais lorsque la mauvaise interprétation de ces octets est faite — en particulier lorsque l’erreur courante d’interpréter ces octets comme ISO-8859-1 au lieu de UTF-8 (chaîne raccourcie pour plus de clarté ci-dessous), vous obtenez :

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 j’utilise print pour cela, mon terminal se bloque. Sauvage. :smiley:

Pour résumer : quoi que vous utilisiez pour extraire les données du message de Discourse, il le traite comme iso-8859-1 au lieu de utf-8.

(spéculation) Peut-être intégrez-vous les octets bruts extraits d’un site Discourse dans une page qui est servie avec une page de code iso-8859-1.

3 « J'aime »

Merci beaucoup pour l’indice. En effet, la meta-tag UTF-8 était après la balise title :wink:

Ça marche maintenant !

1 « J'aime »

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