@xWolf: Ich brauche es nicht ausprobieren, das ist ein grundsätzliches Verständnisproblem bei Dir. Unicode hat *keine* Länge in Bytes, weil Unicode nur ein abstraktes Konzept ist. Wenn Du das im RAM oder auf Platte speichern möchtest, musst Du das mit einer konkreten Kodierung tun. Dabei kommt dann eine Folge von Bytes heraus, die eine Länge hat. Das ist dann aber kein Unicode mehr.
Du kannst Unicode-Objekte nicht auf Platte schreiben -- Du musst sie vorher immer in eine Folge von Bytes umwandeln. Wie Unicode-Objekte intern gespeichert werden, hat Dich nicht zu interessieren. Das kann je nach Python-Implementierung, -Version, oder sogar Optionen, die beim Übersetzen des Interpreters angegeben wurden, unterschiedlich sein.
Deine Funktion ist sinnlos, weil sie soweit ich das sehe mit keiner Kodierung übereinstimmt. Gebräucliche Kodierung, die Zeichen mit unterschiedlichen Längen kodiert ist UTF-8:
Code: Alles auswählen
In [224]: byteLen(u'ä')
Out[224]: 1
In [225]: len(u'ä'.encode('utf-8'))
Out[225]: 2
Hier kommt zum Beispiel zum tragen, dass ASCII ein 7-Bit-Code ist, weil UTF-8 nur ASCII-Zeichen als 1 Byte kodiert und das 'ä', obwohl der Unicode-Codepoint als Zahl noch in ein Byte passen würde, in zwei Bytes kodiert wird. Wenn Du in Deinen Daten Umlaute hast, dann sind sie nicht ASCII, weil alle Zeichen mit Bytewerten über 127 eben nicht ASCII sind. Und auch dort muss man, um zu wissen was denn nun zum Beispiel ein 'ä' sein soll, eine Kodierung dazu sagen.
Also noch einmal: Man kann nicht sagen wie lang ein Unicode-Objekt in Bytes ist, ohne das man auch eine konkrete Kodierung dazu sagt. Und um diese Länge zu ermitteln ist es wesentlich einfacher das Unicode-Objekt einfach zu kodieren und dann zu schauen wie lang das Ergebnis davon ist, als so eine überkomplizierte Funktion zu verwenden.
Wenn Du Deine Daten schon so lange mit Dir rumschleppst verwendest Du wahrscheinlich eine Kodierung bei der ein Zeichen einem Byte entspricht, dann kannst Du auch einfach `len()` auf dem Unicode-Objekt verwenden.