Aktuell schreibe ich gerade ein kleines Programm in Lua um Dateien im CSV-Format in Tabellen für MarkDown umzuwandeln (dazu später mehr).
Ein Problem auf das ich dabei gestoßen bin war dass sobald ein Umlaut in einer Zeichenkette war, dieser zwar als ein Zeichen korrekt angezeigt wird, jedoch intern wenn ich die Länge der Zeichenkette ermitteln wollte mit 2 Zeichen gezählt wurde (weil die Umlaut Zeichen halt 2 Byte brauchen).
Hier habe ich eine Zeichentabelle mit den UTF-8 Zeichen und deren dezimale Werte gefunden. Es fällt auf dass alle Zeichen, die mehr als ein Byte benötigen als ersten Wert immer eine Zahl haben, die größer/gleich 194 ist.
Meine Lösung sieht nun so aus, dass ich zuerst die (fehlerhafte) Länge ohne Berücksichtigung der UTF-8 Zeichen ermitteln. Im Anschluss daran zähle ich wieviele Zeichen einen dezimalen Wert größer/gleich 194 haben. Diese Zahl kann ich dann von der zuvor ermittelten Länge abziehen und habe somit die korrekte Länge die ich benötige.