It is not only in Serial Monitor that I see this issue, it must be in the code somehow.
I get the same result when I generate a string to show in a browser.

from the line:
res += R"rawliteral( <text class="st3 st4" x="0" y="40" fill="beige" text-anchor="middle" dominant-baseline="middle">°C</text>
</svg>)rawliteral";
Also I get it in part of the generated output:
<use href="[#segment](view-source:http://192.168.1.25/Temp#segment)" fill="rgb(93,255,0)" transform="rotate(-63)"/>
<use href="[#segment](view-source:http://192.168.1.25/Temp#segment)" fill="rgb(97,255,0)" transform="rotate(-57)"/>
<use href="[#segment](view-source:http://192.168.1.25/Temp#segment)" fill="Øü?" transform="rotate(-51)"/> <use href="[#segment](view-source:http://192.168.1.25/Temp#segment)" fill="Øü?" transform="rotate(-45)"/>
<use href="[#segment](view-source:http://192.168.1.25/Temp#segment)" fill="Øü?" transform="rotate(-39)"/>
<use href="[#segment](view-source:http://192.168.1.25/Temp#segment)" fill="Øü?" transform="rotate(-33)"/>
<use href="[#segment](view-source:http://192.168.1.25/Temp#segment)" fill="Øü?" transform="rotate(-27)"/>
<use href="[#segment](view-source:http://192.168.1.25/Temp#segment)" fill="Øü?" transform="rotate(-21)"/>
<use href="[#segment](view-source:http://192.168.1.25/Temp#segment)" fill="Øü?" transform="rotate(-15)"/>
<use href="[#segment](view-source:http://192.168.1.25/Temp#segment)" fill="Øü?" transform="rotate(-9)"/>
<use href="[#segment](view-source:http://192.168.1.25/Temp#segment)" fill="rgb(20,20,20)" transform="rotate(-3)"/>
while the output I get from the function is correct but the received data is not

the lines showing "rgb(..."is generated by the following
sprintf(temp,"rgb(%d,%d,%d)\0",r,g,b);
Serial.printf("%s,%d,%d,%d\n",temp,r,g,b);
the receiver prints: I: -63 Color:rgb(93,255,0) or I: -51 Color:���?
using following code:
Serial.printf("\t\t\tI: %d Color:%s\n\r",i,colour);
I solved both issues:
The first I replaced
res += R"rawliteral( <text class="st3 st4" x="0" y="40" fill="beige" text-anchor="middle" dominant-baseline="middle">°C</text>
</svg>)rawliteral";
with:
res += "<text class=\"st3 st4\" x=\"0\" y=\"40\" fill=\"beige\" text-anchor=\"middle\" dominant-baseline=\"middle\">";
res += units;
res += "</text>";
for the second I do no longer "return" the value as a String but use char* passed by reference
this:
String SVGrainbow(byte value){
sprintf(temp,"rgb(%d,%d,%d)\0",r,g,b);
return temp;
}
became
void SVGrainbow(char* retval, byte value){
.....
sprintf(temp,"rgb(%d,%d,%d)\0",r,g,b);
strcpy(retval,temp);
}