decode string

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
zuviel
User
Beiträge: 6
Registriert: Mittwoch 18. Februar 2009, 15:40

hi,

ich übergebe per post einen string den ich vorher mit der javscript funktion encodeURI codiere.
wenn ich die daten nun empfange
(welche so aussehen: %3CDIV%20id=result_box%20dir=ltr%20style=%22TEXT-ALIGN:%20left%22%3E%D0%9F%D1%80%D0%B8%D0%BC ...)
nöchte ich diese wieder decodieren. mit der javascript funktion decodeURI funktioniert dies einwandfrei. nun benötigt ich aber eine python funktion die das gleiche tut.
hoffe ihr könnt mir helfen.
danke!!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo zuviel, willkommen im Forum,

wie wäre es mit ``urllib.unquote``?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
zuviel
User
Beiträge: 6
Registriert: Mittwoch 18. Februar 2009, 15:40

danke für deine schnelle antwort.
es mag wohl funktionieren mit der funktion. das problem ist, dass der text, den ich übergebe aus kyrillischen zeichen besteht und diese dann nicht so dargestellt werden wie vor der übergabe:
vorher:
Примечание: Если вам нужна помощь в использовании Специальная функция. Пожалуйста, обратитесь в центр поддержки.
nachher:
Примечание: ЕÑ
BlackJack

@zuviel: Also die Zeichen im Beispiel sind UTF-8-kodiert. Genau so einen Bytestring bekommst Du dann von `urllib.unquote()`. Jetzt bitte hier: [wiki]Von Umlauten, Unicode und Encodings[/wiki] weiterlesen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du musst eben wissen was das für ein Zeichensatz ist: ist das nun UTF-8 oder KOI8-R oder gar etwas ganz anderes?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
zuviel
User
Beiträge: 6
Registriert: Mittwoch 18. Februar 2009, 15:40

es handelt sich um den zeichensatz KOIR-8.
wenn ich cgi.fieldstorage gucke, was übergeben wird steht dort folgendes:

\xcf\xf0\xe8\xec\xe5\xf7\xe0\xed\xe8\xe5: \xc5\xf1\xeb\xe8 \xe2\xe0\xec \xed\xf3\xe6\xed\xe0 \xef\xee\xec\xee\xf9\xfc \xe2 \xe8\xf1\xef\xee\xeb\xfc\xe7\xee\xe2\xe0\xed\xe8\xe8 \xd1\xef\xe5\xf6\xe8\xe0\xeb\xfc\xed\xe0\xff \xf4\xf3\xed\xea\xf6\xe8\xff. \xcf\xee\xe6\xe0\xeb\xf3\xe9\xf1\xf2\xe0, \xee\xe1\xf0\xe0\xf2\xe8\xf2\xe5\xf1\xfc \xe2 \xf6\xe5\xed\xf2\xf0 \xef\xee\xe4\xe4\xe5\xf0\xe6\xea\xe8.

wenn ich dies nun ausprinte zeigt er mir dies an:
Ïðèìå÷àíèå: Åñëè âàì íóæíà ïîìîùü â èñïîëüçîâàíèè Ñïåöèàëüíàÿ ôóíêöèÿ. Ïîæàëóéñòà, îáðàòèòåñü â öåíòð ïîääåðæêè

dies kann ich ja nun nicht mehr mit dem zeichensatz encoden..

ich habe den text nun übergeben ohne ihn vorher mit javascript zu codieren.
ich hoffe ihr versteht mein problem..
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du musst es erst in Unicode dekodieren und dann kannst du ihn in so einem Encoding enkodieren, das du es lesen kannst. Was für ein Encoding erwartet denn deine Ausgabe?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@zuviel: Was ist als 'KOI8-R' kodiert? Dein letztes Beispiel jedenfalls nicht, das war 'windows-1251':

Code: Alles auswählen

In [107]: s
Out[107]: '\xcf\xf0\xe8\xec\xe5\xf7\xe0\xed\xe8\xe5: \xc5\xf1\xeb\xe8 \xe2\xe0\x
ec \xed\xf3\xe6\xed\xe0 \xef\xee\xec\xee\xf9\xfc \xe2 \xe8\xf1\xef\xee\xeb\xfc\x
e7\xee\xe2\xe0\xed\xe8\xe8 \xd1\xef\xe5\xf6\xe8\xe0\xeb\xfc\xed\xe0\xff \xf4\xf3
\xed\xea\xf6\xe8\xff. \xcf\xee\xe6\xe0\xeb\xf3\xe9\xf1\xf2\xe0, \xee\xe1\xf0\xe0
\xf2\xe8\xf2\xe5\xf1\xfc \xe2 \xf6\xe5\xed\xf2\xf0 \xef\xee\xe4\xe4\xe5\xf0\xe6\
xea\xe8.'

In [108]: print s.decode('KOI8-R')
оПХЛЕВЮМХЕ: еЯКХ БЮЛ МСФМЮ ОНЛНЫЭ Б ХЯОНКЭГНБЮМХХ яОЕЖХЮКЭМЮЪ ТСМЙЖХЪ. оНФЮКСИЯР
Ю, НАПЮРХРЕЯЭ Б ЖЕМРП ОНДДЕПФЙХ.

In [109]: print s.decode('windows-1251')
Примечание: Если вам нужна помощь в использовании Специальная функция. Пожалуйст
а, обратитесь в центр поддержки.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

ist das gramatikalisch so richtig
Russisch
Примечание: Если вам нужна помощь в использовании Специальная функция. Пожалуйст
а, обратитесь в центр поддержки.
Deutsch
Hinweis: Wenn Sie Hilfe benötigen bei der Verwendung von speziellen Funktion. Bitte
Ja, wenden Sie sich bitte an das Support-Center.
sollte doch
GER
Hinweis: Wenn Sie bei der Verwendung von speziellen Funktionen Hilfe benötigen, wenden Sie sich bitte an das Support-Center.
RUS
Примечание: Если вы находитесь в использовании специальных функций нуждаются в помощи, обращайтесь в Центр поддержки.
zuviel
User
Beiträge: 6
Registriert: Mittwoch 18. Februar 2009, 15:40

hi,
die gramatik spielt erstmal keine rolle..
ich bekomme es aber trozdem nicht hin.

ich hoffe ihr könnt mir nochmal auf die sprünge helfen

mein code:

Code: Alles auswählen

myStr = "\xcf\xf0\xe8\xec\xe5\xf7\xe0\xed\xe8\xe5: \xc5\xf1\xeb\xe8 \xe2\xe0\xec \xed\xf3\xe6\xed\xe0 \xef\xee\xec\xee\xf9\xfc \xe2 \xe8\xf1\xef\xee\xeb\xfc\xe7\xee\xe2\xe0\xed\xe8\xe8 \xd1\xef\xe5\xf6\xe8\xe0\xeb\xfc\xed\xe0\xff \xf4\xf3\xed\xea\xf6\xe8\xff. \xcf\xee\xe6\xe0\xeb\xf3\xe9\xf1\xf2\xe0, \xee\xe1\xf0\xe0\xf2\xe8\xf2\xe5\xf1\xfc \xe2 \xf6\xe5\xed\xf2\xf0 \xef\xee\xe4\xe4\xe5\xf0\xe6\xea\xe8."


myStr = myStr.decode('windows-1251')

myStr = myStr.encode('KOI8-R')
print myStr
das ergibt: ðÒÉÍÅÞÁÎÉÅ: åÓÌÉ ×ÁÍ ÎÕÖÎÁ ÐÏÍÏÝØ × ÉÓÐÏÌØÚÏ×ÁÎÉÉ óÐÅÃÉÁÌØÎÁÑ ÆÕÎËÃÉÑ. ðÏÖÁÌÕÊÓÔÁ, ÏÂÒÁÔÉÔÅÓØ × ÃÅÎÔÒ ÐÏÄÄÅÒÖËÉ.
ich möchte aber:
Примечание: Если вам нужна помощь в использовании Специальная функция. Пожалуйста, обратитесь в центр поддержки.

hoffe ihr könnt mir schnell weiterhelfen
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wo "printest" Du denn hin? Ist das eine Ausgabe für nen Browser?
zuviel
User
Beiträge: 6
Registriert: Mittwoch 18. Februar 2009, 15:40

ja ich printe das im browser.

spielt das eine rolle?

danke für deine antowort
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Naja, man muss dem Browser ja auch das Charset mitteilen, mit dem er encodieren soll! Also je nach Browser kann man das manuell einstellen, oder in HTML per meta-Tag setzen. Ich würde also da mal zuerst nachgucken, ob es daran liegt!
zuviel
User
Beiträge: 6
Registriert: Mittwoch 18. Februar 2009, 15:40

danke für den tipp mit dem html header,
habe den meta tag nun eingefügt,
klappt alles.
danke
Antworten