Problem mit Umlauten beim Einbetten von Discourse auf einer anderen Website

Wie hier beschrieben (Embed Discourse comments on another website via Javascript - #453 by limetti) wird beim Einbetten von Discourse auf meiner Website der Titel korrekt analysiert. Da er jedoch Umlaute enthält, werden Titel wie „Ich würde“ zu „Ich würde“.

Ist dies ein allgemeines Problem, ein Problem auf meiner Seite oder gibt es eine Problemumgehung dafür? Danke!

Das ist ein klassisches Problem mit „falscher Codec“.

Als Testfall, wenn wir die Rohdaten aus deinem Beitrag lesen (hier am Beispiel von Python):

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

erhalten wir Bytes, wissen aber nicht, wie wir diese dekodieren sollen. Einer der Antwort-Header teilt uns jedoch mit, dass wir UTF-8 verwenden sollen:

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!

Du wirst feststellen, dass die Zeichen genau so aussehen, wie du sie gepostet hast. Aber wenn die falsche Interpretation dieser Bytes vorgenommen wird – insbesondere wenn der häufige Fehler gemacht wird, diese Bytes als ISO-8859-1 anstatt als UTF-8 zu interpretieren (der String ist der Übersichtlichkeit halber unten gekürzt), erhältst du:

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'

Wenn ich das printe, hängt mein Terminal. Verrückt. :smiley:

Zusammenfassend lässt sich sagen: Was auch immer du verwendest, um die Post-Daten aus Discourse abzurufen, behandelt sie als iso-8859-1 anstelle von utf-8.

(Spekulation) Vielleicht bettest du die Roh-Bytes, die von einer Discourse-Seite abgerufen wurden, in eine Seite ein, die mit einer Codepage von iso-8859-1 ausgeliefert wird.

3 „Gefällt mir“

Vielen Dank für den Hinweis. Tatsächlich war das Meta-Tag UTF-8 nach dem Titel-Tag :wink:

Funktioniert jetzt!

1 „Gefällt mir“

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