Attribut 'TcEncoding'
Über das Pragma definieren Sie, wie eine Variable vom Typ STRING interpretiert werden soll.
Syntax: {attribute 'TcEncoding' := 'UTF-8'}
Einfügeort: Zeile oberhalb der Deklarationszeile der STRING-Variablen
Eine so deklarierte Variable vom Typ STRING nutzt das UTF-8-Format für die Zeichenformatierung des Unicode-Zeichensatzes. Die 0-Terminierung wird, wie bei jeder STRING-Variablen, auch hier angewendet.
Um Sonderzeichen und Texte verschiedener Sprachen zu unterstützen, wird der Zeichensatz also nicht auf den typischen Zeichensatz vom Datentyp STRING (oder WSTRING) beschränkt. Stattdessen wird der Unicode-Zeichensatz als UTF-8-Format in Verbindung mit dem Datentyp STRING verwendet. Diese Formatierung ist in der IT allgemein üblich.
Bei Verwendung des ASCII-Zeichensatzes besteht kein Unterschied zwischen der typischen Formatierung eines STRING und der UTF-8-Formatierung eines STRING.
Ein einzelnes Zeichen wird bei einer STRING-Variablen immer innerhalb eines Bytes und bei einer WSTRING-Variablen immer innerhalb zwei Bytes abgespeichert. Ein einzelnes Zeichen wird bei der UTF-8-Formatierung jedoch innerhalb 1-4 Bytes abgespeichert, je nachdem, um welches Zeichen es sich handelt. Deshalb stimmt die Anzahl der Zeichen oft nicht mit der Variablengröße in Bytes überein.
Beispiel 1:
Das Pragma wird jeweils in der Zeile oberhalb der Variablendeklaration eingefügt. Es wirkt somit nur auf die jeweils folgende Deklarationszeile.
VAR
sMyStringText : STRING;
wsMyWStringText : WSTRING;
{attribute 'TcEncoding':='UTF-8'}
sMyUTF8Text : STRING;
END_VAR
Beispiel 2:
Die Zuweisung eines Literals bedarf einer Hilfsfunktion, wenn der Text Zeichen beinhaltet, die nicht im ASCII-Zeichensatz definiert sind.
VAR
sMyStringText : STRING := 'The dinner costs 30 €.';
wsMyWStringText : WSTRING := "The dinner costs 30 €.";
{attribute 'TcEncoding':='UTF-8'}
sMyUTF8Text1 : STRING := sLiteral_TO_UTF8('The dinner costs 30 €.');
{attribute 'TcEncoding':='UTF-8'}
sMyUTF8Text2 : STRING := wsLiteral_TO_UTF8("The dinner costs 30 €.");
{attribute 'TcEncoding':='UTF-8'}
sMyUTF8Text3 : STRING := 'Hello World.';
// verfügbar ab TC3.1 Build 4026
{attribute 'TcEncoding':='UTF-8'}
sMyUTF8Text4 : STRING := UTF8#'The dinner costs 30 €.';
END_VAR
Weitere Hilfsfunktionen für STRING-Variablen und Konvertierungsmöglichkeiten für UTF-8 werden in der Dokumentation TwinCAT 3 PLC Lib TC2_Utilities beschrieben.