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.
Zeichensatz | Codepage-Nummer | Beschreibung | Zeichenkodierung |
---|---|---|---|
ASCII | 20127 |
| 7-Bit kodiertes Zeichen |
DOS-Latin-1 | 819, 850 |
| 8-Bit kodiertes Zeichen |
Latin-1 | 28591 |
| 8-Bit kodiertes Zeichen |
Windows 1252 Kodierung | 1252 |
| 8-Bit kodiertes Zeichen |
Unicode |
Für weitere Informationen siehe: https://home.unicode.org/ | ||
Unicode 14.0 | 144697 Zeichen | ||
UTF-16 | 1200 |
| 16 -Bit kodiertes Zeichen Die Zeichen werden entweder in 2 Bytes oder in 4 Bytes kodiert |
UTF-8 | 65001 |
| 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.
Datentyp | Compile-Option: UTF8-Kodierung für STRING | Welcher Kodierung wird projektweit verwendet? |
---|---|---|
| Aktiviert | UTF-8 |
Deaktiviert | Windows 1252 Kodierung (Default Windows Encoding) Latin-1 | |
| 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.