Unicode Unterstützung

Dieser Artikel enthält Details zur Unicode Unterstützung in Python.

Betriebsart

Cloud Abo

|

ON-PREMISES

Module

Leistung & CRM

Budget & Teilprojekt

Fremdkosten

Ressourcenplanung

Business Intelligence

Erstellt: 08.09.2021
Aktualisiert: 19.10.2021 | Artikel umformuliert

Texte werden in Vertec in Unicode abgespeichert (seit Vertec 6.5). Dementsprechend unterstützt Vertec alle rund 65'000 Zeichen der BMP ("Basic Multilingual Plane") und damit die Zeichen aller relevanten Sprachen, einschliesslich sämtlicher asiatischer Sprachen. Zeichen, die ausserhalb der BMP liegen und in Vertec eingetragen werden, werden durch ein ? ersetzt (was nur bei einigen wenigen Emojis der Fall sein dürfte).

Python und Unicode

Das Default Encoding in Python ist ANSI. Die Übertragung von einem Unicode String in das Default Encoding, also von Unicode nach ANSI, ist fehlertolerant gestaltet: Zeichen, die nicht umgewandelt werden können, führen nicht zu einem Fehler, sondern werden durch ? ersetzt.

Das Python str Modul wird in Vertec zudem auf Unicode «umgebogen», weil eine Analyse von bestehendem Python Code bei Kunden gezeigt hat, dass es viele Verwendungen von str() gibt, auch bei Daten, die bereits Strings sind, und die ohne diese Korrektur dann Fehler generieren würden.

Werden Strings verarbeitet und beispielsweise in einem File gespeichert oder an einen Webservice gesendet, muss dabei ein Unicode Encoding (wie z.B. UTF-8) gewählt werden, damit die Gegenseite diese korrekt lesen kann. Ohne ein explizites Encoding wie zum Beispiel string.encode("UTF-8") kommt die implizite Umwandlung auf ANSI mit dem oben erwähnten Datenverlust von nicht-ANSI Zeichen als ? zum Tragen.

Auch beim Einlesen von Daten nach Vertec, sei es über das Öffnen einer Textdatei, über die Vertec XML Schnittstelle oder einem vtcapp.requestfilefromclient() sollte man sich ums Encoding kümmern, weil Datenverluste von nicht-ANSI Zeichen durch die Unicode Unterstützung unnötig sind. Liest man also z.B. ein Textfile ein, welches in UTF-8 encodiert ist, muss dieses korrekt dekodiert werden:

unicodestring = filecontent.decode("UTF-8")

Als Faustregel kann man sich merken, dass in Python

  • encode() immer von einem Unicode String zu einem Bytestream konvertiert
  • decode() immer von einem Bytestream (z.B. in UTF-8) zu Unicode konvertiert

Netherlands

United Kingdom