Codepage setzen

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.
NoRulez
User
Beiträge: 36
Registriert: Donnerstag 1. November 2007, 15:31

Codepage setzen

Beitragvon NoRulez » Samstag 6. September 2008, 15:21

Hey @all,

wie kann man in Python die Codepage setzen/verändern.
Habe es schon so probiert:

Code: Alles auswählen

import os
import locale

os.environ['LANG'] = "de_DE.UTF8"
# bzw.
os.environ['LC_ALL'] = "de_DE.UTF8"

# Schreibt ISO-8859-1
print locale.nl_langinfo(locale.CODESET)


Das Problem ist folgendes:

Code: Alles auswählen

import sys
import os
import locale
import getopt
import quopri   #   quoted printable

def main():
    iso = "de_DE"
    locale.setlocale(locale.LC_ALL, iso)
    name = ""

    try:
        opts, args = getopt.getopt(sys.argv[1:], "hs:si:s", ["help", "string=", "iso="])
    except getopt.GetoptError:
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-h", "--help"):
            usage()
            sys.exit()
        elif opt in ("-i", "--iso"):
            iso = arg
            locale.setlocale(locale.LC_ALL, iso)
        elif opt in ("-s", "--string"):
            name = arg
            print "%s%s%s" % ("=?" + locale.nl_langinfo(locale.CODESET) + "?Q?", quopri.encodestring(b), "?=")
            sys.exit()

if __name__ == "__main__":
    main()

Aufruf dann wie folgt:

Code: Alles auswählen

./encoder.py --string "Max Müller"

Code: Alles auswählen

# Max Müller ergibt: =?ISO-8859-1?Q?Max M=C3=BCller?=
# anstatt =?ISO-8859-1?Q?Max M=FCller?=


Lg NoRulez
NoRulez
User
Beiträge: 36
Registriert: Donnerstag 1. November 2007, 15:31

Beitragvon NoRulez » Samstag 6. September 2008, 16:39

Komisch, auf einigen Systemen schreibt er

Code: Alles auswählen

=?ISO-8859-1?Q?Max M=C3=BCller?=

und auf anderen Systemen wieder:

Code: Alles auswählen

=?ISO-8859-1?Q?Max M=FCller?=

was passen würde.

Was muss ich ändern damit es überall gleich ist?

Lg NoRulez
BlackJack

Beitragvon BlackJack » Samstag 6. September 2008, 17:33

Das geht schlicht und einfach nicht. Du musst wissen in welcher Kodierung die Daten herein kommen und sie ggf. umkodieren. Und am besten auch eine Option bereit stellen, damit der Benutzer angeben kann welche Kodierung verwendet wird, für den Fall, dass man das nicht automatisch herausfinden kann.

Das Kodieren als Header würde ich übrigens mit den Funktionen aus dem `email`-Paket machen und nicht von Hand.
NoRulez
User
Beiträge: 36
Registriert: Donnerstag 1. November 2007, 15:31

Beitragvon NoRulez » Sonntag 7. September 2008, 11:46

Ich dachte es deswegen so, weil mein Webhosting - Anbieter kein imap_8bit unterstützt und sonst nur lauter quatsch rauskommt, jetzt dachte ich mir da er zum glück python installiert hat ich diesbezüglich eben dieses kleine Skript ausführe.

Lg NoRulez
NoRulez
User
Beiträge: 36
Registriert: Donnerstag 1. November 2007, 15:31

Beitragvon NoRulez » Sonntag 7. September 2008, 11:48

BlackJack hat geschrieben:Du musst wissen in welcher Kodierung die Daten herein kommen und sie ggf. umkodieren.


Ich schätze mal zu 90 % werden es welche aus den EU-Ländern sein, hauptsächlich Deutschland und Österreich, falls jedoch jemand von Thailand das Formular ausfüllt...gute Frage, aber theoretisch sollte UTF-8 allemal ausreichen anstatt ISO-8859-15, jedoch funktioniert es auch mit UTF-8 genauso wenig

Was kann ich also lösung tun?

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]