handle UTF8 characters
This commit is contained in:
parent
61fda5250d
commit
ff77dd1207
103
src/main.cpp
103
src/main.cpp
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user