Dieses Kapitel beschreibt Operatoren für String-Operationen.
Die HALCON-Bibliothek kodiert Strings standardmäßig in UTF-8.
UTF-8 ist eine Kodierung für Unicode-Zeichen, die alle Unicode-Codepoints mit einem bis vier Bytes kodieren kann. „Unicode“ bezeichnet den Zeichensatz, mit dem jedem Zeichen eines Strings ein Codepoint (z.B. 'U+0041' für 'A') zugewiesen werden kann. Mit UTF-8 werden dann die Unicode-Codepoints in Binärdaten übersetzt. Der Speicherbedarf für alle ASCII-Zeichen beträgt in der Regel 1 Byte. Bestimmte Zeichen wie beispielsweise deutsche Umlaute, oder griechische und kyrillische Zeichen erfordern 2 Bytes. Asiatische Zeichen belegen bis zu 4 Bytes je Zeichen.
Die HALCON-String-Operatoren arbeiten standardmäßig auf Basis von Unicode-Codepoints. D.h., beim Zugriff auf ein Zeichen eines Strings wird immer der entsprechende Unicode-Codepoint des Zeichens zurückgegeben, unabhängig davon, wie viele Bytes benötigt werden, um den Codepoint in UTF-8 darzustellen. Somit können Multi-Byte Zeichen, wie asiatische Zeichen oder deutsche Umlaute auf allen Systemen einheitlich übersetzt werden. Bitte beachten Sie, dass der Unicode-Standard es auch erlaubt, druckbare Zeichen aus mehreren Codepoints zusammenzusetzen (mit Hilfe sogenannter „Combining Diacritical Marks“). Dies wird derzeit von HALCON nicht vollständig unterstützt: in HALCON werden die Codepoints separat verarbeitet, und beim Vergleich von Strings werden äquivalente Zeichen nicht gleich gesetzt, wenn sie mit unterschiedlichen Codepoints codiert sind.
Sollte es beim Ausführen von alten Programmen Kompatibilitäts-Probleme geben,
kann die Stringkodierung der HALCON-Bibliothek von 'utf8'
auf
'locale'
gesetzt werden (Legacy-Modus).
Dann werden Strings abhängig von der Ländereinstellung gespeichert und die
String-Operatoren arbeiten – wie in früheren HALCON-Versionen – nicht zeichen-
sondern byteweise.
Sollte auch im UTF-8-Modus eine byteweise Verarbeitung von Zeichen nötig sein,
kann mit dem Operator
die Option
set_system
'tuple_string_operator_mode'
von 'codepoint'
auf
'byte'
gesetzt werden.
Dann arbeiten die String-Operatoren nicht mehr auf der Basis von Codepoints.
Die Bytefolge eines Strings kann beispielsweise zum Debugging interessant sein.
tuple_environment
tuple_regexp_match
tuple_regexp_replace
tuple_regexp_select
tuple_regexp_test
tuple_split
tuple_str_first_n
tuple_str_last_n
tuple_strchr
tuple_strlen
tuple_strrchr
tuple_strrstr
tuple_strstr
tuple_substr