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.
def encodetoLdap(string):
#print type(string)
alpha=True
newchar=""
outputString=""
for c in string:
if(c.isalpha()==False and c!=" " and c!="=" or alpha==False):
newchar=newchar+hex(ord(c)).replace('0x','\\').upper()
if alpha==False:
alpha=True
outputString=outputString+newchar
newchar=""
else:
alpha=False
else:
outputString=outputString+c
return outputString
@LukLuk: Die Beschreibung und auch das was die Funktion da macht erscheint mir etwas wirr. Du solltest Dich mal mit Unicode-Objekten und „normalen Strings“ ausseinandersetzen, denn Du hast das in der Beschreibung etwas verquer. Normale Strings enthalten keine Buchstaben also auch keine Umlaute sondern einfach nur Bytewerte. Die können wenn man sie mit einer passenden Kodierung betrachtet auch Bytes enthalten die einen Umlaut darstellen würden in einer richtigen *Zeichen*kette. Und *richtige* *Zeichen*ketten die auch tatsächlich Umlaute als Zeichen enthalten können sind Unicode-Objekte.
Falls Du alle Bytewerte ausserhalb von ASCII in Escape-Sequenzen der Form \?? mit ?? zwei Hexadezimalziffern umwandeln möchtest, dann musst Du schon Bytewerte also `str` in diese Funktion geben. Und die solltest Du dann auch so umschreiben das die Implementierung eher wie der erste Satz dieses Absatzes aussieht und nicht mit dieser komischen Bedingung und dem `alpha`-Flag, was zum Beispiel problematisch wird wenn ein Zeichen in UTF-8 kodiert nicht zwei sondern drei Bytes braucht. Und den \ selbst berücksichtigt Deine Funktion auch nicht. Wenn der in der Eingabe vorkommt, kannst Du das nicht mehr immer eindeutig dekodieren. Selbst wenn \ nie in der Eingabe vorkommen kann, würde ich zumindest darauf prüfen und gegebenfalls eine Ausnahme auslösen oder zumindest ein ``assert`` dafür schreiben.
`hex()` und dann '0x' abschneiden und `upper()` anwenden ist umständlich, man kann das viel einfacher über `format()` lösen in dem man mit dem Formatstring direkt zwei grossbuchstabige Hex-Ziffern fordert, ohne irgendeinen Präfix.
Byteketten bekommt man aus Unicode-Zeichenketten in dem man sie kodiert. Mit der `encode()`-Methode und der Angabe der Zeichenkodierung die man gerne hätte.
@LukLuk: um es nochmal deutlich zu sagen, das Encoding ist nur eins der vielen Probleme, die Deine Funktion hat. Hast Du sie schon einmal für beliebige Zeichen getestet?