Seite 1 von 1

UTF-8 Chinesisches Zeichen in zu öffnender URL (Python 3)

Verfasst: Freitag 11. Januar 2019, 21:13
von marcusp
Ich habe Probleme, wenn ich eine URL öffnen möchte, in der ein Chinesisches Schriftzeichen vorkommt.

Ich bin mit Python3 unterwegs und öffne das Script auf meinem Mac auch explizit mit
python3 test.py

Gebe ich die zu öffnende URL auf dem Bildschirm aus statt zu versuchen die Adresse zu öffnen, wird sie völlig korrekt angezeigt ... wie auch anders zu erwarten, Python 3 unterstützt UTF-8 ja von Haus aus, gelle?!

Code: Alles auswählen

import urllib.request

html_adresse = 'http://www.hanzicraft.com/character/的'
#print(api_adresse)

resource = urllib.request.urlopen(html_adresse)
content =  resource.read().decode(resource.headers.get_content_charset())
Versuche ich dagegen die URL zu öffnen, bekomme ich folgende Fehlermeldung:
Traceback (most recent call last):
File "test.py", line 6, in <module>
resource = urllib.request.urlopen(html_adresse)
...
UnicodeEncodeError: 'ascii' codec can't encode character '\u7684' in position 7: ordinal not in range(128)
Versuche ich dagegen jede beliebige andere URL ohne chinesischem Schriftzeichen zu öffnen, gibt es keinen Fehler.

Ich habe es mit Suche im Forum und mit Google versucht.
Doch alles was ich finde, ist dass Leute diese Probleme mit Python 2 haben ... in Python 3 jedoch nicht :-(

Kann jemand von Euch mein Problem in Python 3 nachvollziehen?
Tipps für die Lösung?

Danke schon einmal!

Re: UTF-8 Chinesisches Zeichen in zu öffnender URL (Python 3)

Verfasst: Freitag 11. Januar 2019, 21:40
von Sirius3
Sonderzeichen muß man in URLs codieren. Z.B.: `urllib.parse.quote(html_adresse, safe='/:?@&=+')`

Re: UTF-8 Chinesisches Zeichen in zu öffnender URL (Python 3)

Verfasst: Freitag 11. Januar 2019, 21:59
von sls
@marcusp: das musst du für Python2 wie 3 gleichermaßen tun. Sonderzeichen in URLs (ASCII wie non-ASCII) gehören entsprechend "URL-Enkodiert", auch "Prozentkodierung" genannt, weil Sonderzeichen durch ein % gefolgt von Dezimalzahlen ersetzt werden.

Re: UTF-8 Chinesisches Zeichen in zu öffnender URL (Python 3)

Verfasst: Freitag 11. Januar 2019, 22:08
von __blackjack__
Ein weiterer Grund das `requests`-Modul zu verwenden, das macht das netterweise schon für einen. :-)

Re: UTF-8 Chinesisches Zeichen in zu öffnender URL (Python 3)

Verfasst: Samstag 12. Januar 2019, 00:58
von sls
Tatsächlich! Ich dachte mir vorhin beim Schneeschaufeln dass das doch bei requests out of the box geht, hatte aber nicht in Erinnerung dass der TE urllib verwendet.

Re: UTF-8 Chinesisches Zeichen in zu öffnender URL (Python 3)

Verfasst: Samstag 12. Januar 2019, 10:20
von marcusp
ich habe jetzt das Requests-Modul installiert und muss sagen, damit funktioniert es wunderbar.
Dankeschön :-)

Falls es ein anderer Anfänger sucht: http://docs.python-requests.org/en/master/