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.