handle UTF8 characters

This commit is contained in:
Marcel Walter 2026-02-20 12:30:10 +01:00
parent 61fda5250d
commit ff77dd1207

View File

@ -430,12 +430,23 @@ String printClose(String Args)
return Text;
}
String replaceUTF8Char(const char * message, int &i, unsigned int length);
String printText(String Args)
{
auto message = Args.c_str();
auto len = Args.length();
Text = "";
for (int i = 0; i < len; i++)
{
Text += replaceUTF8Char(message, i, len);
}
Serial.print("Display would show '");
Serial.print(Args);
Serial.print(Text);
Serial.println("'");
Text = Args;
publishClose();
return Text;
@ -457,6 +468,92 @@ String printLate30(String Args)
return Text;
}
String replaceUTF8Char(const char * message, int &i, unsigned int length)
{
String str = "_";
if ((message[i] < 0x7E))
{
//ASCII Char
str = message[i];
}
else if (((i + 1) < length) && (message[i] == 0xC3) && (message[i + 1] == 0xA4))
{
str = "ae";
i += 1;
}
else if (((i + 1) < length) && (message[i] == 0xC3) && (message[i + 1] == 0x84))
{
str = "Ae";
i += 1;
}
else if (((i + 1) < length) && (message[i] == 0xC3) && (message[i + 1] == 0xB6))
{
str = "oe";
i += 1;
}
else if (((i + 1) < length) && (message[i] == 0xC3) && (message[i + 1] == 0x96))
{
str = "Oe";
i += 1;
}
else if (((i + 1) < length) && (message[i] == 0xC3) && (message[i + 1] == 0xBC))
{
str = "ue";
i += 1;
}
else if (((i + 1) < length) && (message[i] == 0xC3) && (message[i + 1] == 0x9C))
{
str = "Ue";
i += 1;
}
else if (((i + 1) < length) && (message[i] == 0xC3) && (message[i + 1] == 0x9F))
{
str = "ss";
i += 1;
}
else if (((i + 1) < length) && (message[i] == 0xC2) && (message[i + 1] == 0xB2))
{
str = "2";
i += 1;
}
else if (((i + 1) < length) && (message[i] == 0xC2) && (message[i + 1] == 0xB3))
{
str = "3";
i += 1;
}
else if (((i + 1) < length) && (message[i] == 0xC2) && (message[i + 1] == 0xB4))
{
str = "'";
i += 1;
}
else if (((i + 1) < length) && (message[i] == 0xC2) && (message[i + 1] == 0xB5))
{
str = "u";
i += 1;
}
else if (((i + 2) < length) && (message[i] == 0xE2) && (message[i + 1] == 0x82) && (message[i + 2] == 0xAC))
{
str = "EUR";
i += 2;
}
else if (message[i] & 0xC0)
{
//if utf8 char was not handled above find end of utf8 char
while (i < length)
{
i++;
if (!(message[i] & 0x80) || ((message[i] & 0xC0) == 0xC0))
{
i--;
break;
}
}
}
return str;
}
void mqttCallback(char *topic, unsigned char *message, unsigned int length)
{
String MessageString;
@ -464,7 +561,7 @@ void mqttCallback(char *topic, unsigned char *message, unsigned int length)
/* Convert all char* to Strings for simpler handling */
for (int i = 0; i < length; i++)
{
MessageString += (char) message[i];
MessageString += replaceUTF8Char((const char*) message, i, length);
}
String ToppicString(topic);