Seite 1 von 1
Re: Umlaute in Python
Verfasst: Donnerstag 22. September 2022, 16:38
von __blackjack__
@Impulse_VLR: Ja das geht.
Re: Umlaute in Python
Verfasst: Donnerstag 22. September 2022, 16:55
von narpfel
Hm, ich würde ja sagen, dass es nicht geht. Zeichenketten sind ja schließlich unveränderlich.
Aber man kann sich (ohne Veränderung) eine neue Zeichenkette erstellen, bei der die Umlaute ausgetauscht wurden. Mit
der passenden Methode von `str` zum Beispiel.
Re: Umlaute in Python
Verfasst: Donnerstag 22. September 2022, 18:10
von __blackjack__
@narpfel: Es gibt das `ctypes`-Modul.
Wobei `translate()` vielleicht effizienter ist wenn man mehr als ein Zeichen austauschen möchte.
Re: Umlaute in Python
Verfasst: Freitag 23. September 2022, 13:23
von Kebap
Wie hilft das ctypes beim Übersetzen von Buchstaben?
https://docs.python.org/3/library/ctypes.html
Oder ist ein anderes gemeint?
@Impulse_VLR
Warum möchtest du ä in "ae", usw. übersetzen und kannst nicht einfach bei den Umlauten bleiben?
Re: Umlaute in Python
Verfasst: Freitag 23. September 2022, 14:32
von narpfel
@Kebap: Das war eine Antwort auf meine Aussage, dass Strings immutable sind. Mit `ctypes` kann man sich den Speicher hinter dem String geben lassen und an Python vorbei verändern. Das hat ... interessante Effekte:
Code: Alles auswählen
#!/usr/bin/env python3
import ctypes
import sys
STRING = "Hello, World!"
def main():
string_to_modify = "Hello, World!"
size = sys.getsizeof(string_to_modify)
ctypes.cast(id(string_to_modify), ctypes.POINTER(ctypes.c_char))[size - 10] = b'p'
print(STRING)
print("Hello, World!")
if __name__ == "__main__":
main()
Das Programm gibt
aus, obwohl das Programm zwei andere Strings ausgibt und nicht den, der verändert wurde.
Re: Umlaute in Python
Verfasst: Freitag 23. September 2022, 17:53
von nezzcarth
Die gezeigte Variante ist für den Hausgebrauch für die paar Fälle des Deutschen ausreichend.
Wenn es über den Hausgebrauch hinaus geht, bietet sich das Modul
PyICU an, das ein Wrapper um die in C++-geschriebene
ICU Bibliothek des Unicode-Konsortiums ist und das Problem (neben vielen, vielen anderen) umfassender abhandelt.
Code: Alles auswählen
In [1]: import icu
In [2]: transliterator = icu.Transliterator.createInstance('de-ascii')
In [3]: transliterator.transliterate('Ä Ö Ü ä ö ü ß')
Out[3]: 'AE OE UE ae oe ue ss'