Skip to main content

UTF-8-Kodierung

Grundlegendes

Applikationen in CODESYS können unterschiedlichste Zeichen verarbeiten, um beispielsweise eine Fehlermeldung in einer Vielzahl von Sprachen auszugeben. Oder um Visualisierungen in einer vom Benutzer auswählbaren Sprache anzuzeigen, die Benutzereingaben in den unterschiedlichsten Sprachen, Zeichen oder Symbolen akzeptiert.

Wenn ein umfassender Zeichensatz nicht nötig ist, oder wenn ein Projekt nicht geändert werden soll, kann weiterhin im Latin-1-Format kodierte Strings verwendet werden.

Tabelle 3. Zeichensatztabellen

Zeichensatz

Codepage-Nummer

Beschreibung

Zeichenkodierung

ASCII

20127

  • 128 Zeichen

  • Geeignet für englische Texte

7-Bit kodiertes Zeichen

DOS-Latin-1

819, 850

  • Entspricht ISO 8859

  • Geeignet für westeuropäische Sprachen im Windows-Kommandozeilenfenster

8-Bit kodiertes Zeichen

Latin-1

28591

  • Entspricht ISO-8859-1

  • Häufig verwendet für HTML-Seiten mit äöüß, aber ohne € oder beispielsweise ohne französische Sonderzeichen

8-Bit kodiertes Zeichen

Windows 1252 Kodierung

1252

  • Windows-Standardzeichensatz für westeuropäische Länder

  • Intern verwendet Windows das UTF-16-Format

  • Enthält alle Zeichen aus ISO 8859-1 und ISO 8859-15, allerdings teilweise mit anderer Kodierung

8-Bit kodiertes Zeichen

Unicode

  • Universeller Zeichensatz für alle möglichen Sprachen, auch historische Sprachen, Blindenschrift, Musik oder Emojis

  • Mehr als 100 000 Schriftzeichen darstellbar

  • Jedes Zeichen hat einen numerischen Code

  • Trennt im Unterschied zu ASCII zwischen der Zuordnung von Codepoints zu Zeichen und der Codierung der Zeichen

  • Numerische Code < 128 sind ASCII kompatibel

  • Numerische Codes < 256 sind ISO 8859-1 kompatibel

Für weitere Informationen siehe: https://home.unicode.org/

Unicode 14.0

144697 Zeichen

UTF-16

1200

  • Spezielles Unicode

  • Wird in einigen Betriebssystemen (Windows, OS X) und Programmiersprachen (Java, .NET) für die interne Zeichendarstellung verwendet

  • Zu beachten ist, dass unterschiedliche Rechnerarchitekturen die 4-Byte-Zeichen unterschiedlich kodieren

    Little-endian-Byte-Reihenfolge bei UTF-16LE

16 -Bit kodiertes Zeichen

Die Zeichen werden entweder in 2 Bytes oder in 4 Bytes kodiert

UTF-8

65001

  • Byte orientiertes Kodierungsformat von Unicode-Zeichen

  • Am weitesten verbreitet

  • Wird in den Betriebssystemen GNU/Linux und Unix, und in verschiedenen Internetdiensten (E-Mail, Web, Browser) verwendet

  • Ist in den ersten 128 Zeichen von 0..127 kompatibel zu ASCII-Zeichen

Tupel von 8-Bit Worten pro Zeichen

Die Zeichen werden in verschiedener Länge von 1 bis 4 Bytes kodiert



UTF-8 in CODESYS

Tipp

Die UTF-8-Kodierung ist die Kodierung mit dem umfassendsten Zeichensatz. Daher ist es empfehlenswert für neue Projekte sowie für bestehende Projekte, die in einem neuen Kontext eingesetzt werden sollen, die UTF-8-Kodierung zu aktivieren.

Tabelle 4. Projektweite Kodierungen in CODESYS

Datentyp

Compile-Option: UTF8-Kodierung für STRING

Welcher Kodierung wird projektweit verwendet?

STRING

Aktiviert

UTF-8

Deaktiviert

Windows 1252 Kodierung (Default Windows Encoding)

Latin-1

WRTRING

Aktiviert

UTF-16

Deaktiviert

UTF-16



In CODESYS kann der Datentyp STRING in den Formaten Latin-1 oder UTF-8, codiert werden. Der WSTRING-Datentyp codiert seine Zeichen immer als Unicode in UTF-16.

Einzelnes Stringliteral im UTF-8-Format kodieren

Auch wenn das projektweite Kodierungsformat auf Latin-1 eingestellt ist, können Sie eine einzelne Literale im UTF-8-Format kodieren. Stellen Sie dafür dem Literal das Typpräfix UTF8# vor.

{attribute 'monitoring_encoding' := 'UTF-8'}
strVarUtf8: STRING := UTF8#'你好,世界!ÜüÄäÖö';

Für weitere Informationen siehe: Konstante: UTF8#-String, Pragmaattribut: monitoring_encoding

Stringkonvertierung bei UTF-8-Kodierung

Wenn Sie die UTF-8-Kodierung projektweit aktiviert haben, können Sie die Stringkonvertierungsfunktionen wie üblich verwenden.

Stringmanipulation

Verwenden Sie Bibliotheksfunktionen, um Ihre Strings zu manipulieren

Wenn STRING-Variable manipuliert werden sollen, führt ein Indexzugriff auf eine Variable im ASCII-Format oft zu dem gewünschten Resultat. Verwenden Sie dieses Konstrukt besser nicht. Es ist nicht nur ein schlechter Programmierstil. Erschwerend kommt hinzu, dass bei UTF-8-Kodierung der Indexzugriff zu unerwünschten Stringmanipulationen führt.

UTF-8-Kodierung nur bei projektweiter Konfigurierung

Eine UTF-8-Kodierung wird verwendet, wenn die projektweit gültige Compile-Option UTF8-Kodierung für STRING aktiviert ist. Bibliotheksfunktionen und Add-ons orientieren sich dann auch gemäß diesem Setting.

Wenn Sie einzelne UTF-8 kodierte Strings verwenden, dann müssen Sie dafür Sorge tragen, dass diese überall dort, wo sie verwendet werden, auch richtig interpretiert werden. Eine String-Variable im OPC-Server wird zum Beispiel vor der Übertragung zu einem Client nach UTF-8 konvertiert, wenn das Setting nicht angewählt ist. Werte wie beispielsweise UTF8#'äöü' würden dann falsch interpretiert werden. Ähnliche Probleme können bei der Ausgabe von Strings in der Visualisierung entstehen.