Encoding Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
peterpan
User
Beiträge: 3
Registriert: Sonntag 24. August 2008, 13:40

Encoding Problem

Beitragvon peterpan » Sonntag 24. August 2008, 13:48

Hi,

in einem Script möchte ich eine Usereingabe haben die Teil einer URL wird. Jetzt habe ich Probleme mit Sonderzeichen.

z.B. müsste "á" zu "%C3%A1" werden.

"%C3%A1" ist urlencoded und ist eigentlich "\xc3\xa1" und unicode('\xc3\xa1', 'utf-8') gibt mir auch "á" zurück. Aber wie geht es anders herum? Wie komme ich von "á" zu "\xc3\xa1"? :)
BlackJack

Beitragvon BlackJack » Sonntag 24. August 2008, 14:14

Schau Dir mal `urllib.quote()` an.
peterpan
User
Beiträge: 3
Registriert: Sonntag 24. August 2008, 13:40

Beitragvon peterpan » Sonntag 24. August 2008, 14:59

Bekomme es nicht hin.

urllib.quote('á') gibt mir "%A0" zurück. Ist das ein erster Schritt in Richtung "\xc3\xa1" bzw. "%C3%A1" oder ganz die falsche Richtung? :)
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Sonntag 24. August 2008, 16:13

Code: Alles auswählen

In [6]: urllib.quote(u"á".encode("utf-8"))
Out[6]: '%C3%A1'


=DDD
peterpan
User
Beiträge: 3
Registriert: Sonntag 24. August 2008, 13:40

Beitragvon peterpan » Sonntag 24. August 2008, 16:30

danke vielmals :)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Sonntag 24. August 2008, 16:34

Oder etwas ausführlicher bei mir unter Windows:

Code: Alles auswählen

>>> urllib.quote('á'.decode('cp1252').encode('utf-8'))
'%C3%A1'
>>> urllib.quote('á'.decode('utf-8').encode('utf-8'))

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in -toplevel-
    urllib.quote('á'.decode('utf-8').encode('utf-8'))
  File "C:\Programme\Python24\lib\encodings\utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe1 in position 0: unexpected end of data
Bei Dir ist also 'á' in einem anderen Encoding als 'utf-8' gespeichert.
MfG
HWK

Wer ist online?

Mitglieder in diesem Forum: Don Terremoto