Seite 1 von 1

decode string

Verfasst: Mittwoch 18. Februar 2009, 16:04
von zuviel
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!!

Verfasst: Mittwoch 18. Februar 2009, 16:06
von Leonidas
Hallo zuviel, willkommen im Forum,

wie wäre es mit ``urllib.unquote``?

Verfasst: Mittwoch 18. Februar 2009, 16:13
von zuviel
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:
Примечание: ЕÑ

Verfasst: Mittwoch 18. Februar 2009, 16:22
von 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.

Verfasst: Mittwoch 18. Februar 2009, 16:23
von Leonidas
Du musst eben wissen was das für ein Zeichensatz ist: ist das nun UTF-8 oder KOI8-R oder gar etwas ganz anderes?

Verfasst: Mittwoch 18. Februar 2009, 16:47
von zuviel
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..

Verfasst: Mittwoch 18. Februar 2009, 17:10
von Leonidas
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?

Verfasst: Mittwoch 18. Februar 2009, 18:10
von 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')
Примечание: Если вам нужна помощь в использовании Специальная функция. Пожалуйст
а, обратитесь в центр поддержки.

Verfasst: Mittwoch 18. Februar 2009, 19:31
von sea-live
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
Примечание: Если вы находитесь в использовании специальных функций нуждаются в помощи, обращайтесь в Центр поддержки.

Verfasst: Donnerstag 19. Februar 2009, 09:32
von zuviel
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

Verfasst: Donnerstag 19. Februar 2009, 10:43
von Hyperion
Wo "printest" Du denn hin? Ist das eine Ausgabe für nen Browser?

Verfasst: Donnerstag 19. Februar 2009, 10:45
von zuviel
ja ich printe das im browser.

spielt das eine rolle?

danke für deine antowort

Verfasst: Donnerstag 19. Februar 2009, 10:50
von Hyperion
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!

Verfasst: Donnerstag 19. Februar 2009, 11:50
von zuviel
danke für den tipp mit dem html header,
habe den meta tag nun eingefügt,
klappt alles.
danke