diff --git a/api/String.cpp b/api/String.cpp
index 4f176374..2423584c 100644
--- a/api/String.cpp
+++ b/api/String.cpp
@@ -747,4 +747,38 @@ double String::toDouble(void) const
 	return 0;
 }
 
+String String::fromUtf8ToEAscii(void) const
+{
+	/*
+     * references : 
+	 * https://www.ime.usp.br/~pf/algoritmos/apend/unicode.html
+     * https://www.utf8-chartable.de/unicode-utf8-table.pl
+     * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+	 */
+    String eAsciiString;
+    for (uint8_t i=0; i< length(); i++)
+    {
+        uint8_t byteScope = (uint8_t)buffer[i];
+        if (byteScope < 0x7F)
+        {
+            eAsciiString += buffer[i];
+        }
+        else if (byteScope == 0xC3)
+        {
+            i++;
+            byteScope = (uint8_t)buffer[i];
+            if (byteScope > 0x7F)
+                eAsciiString += (char)(byteScope+0x40);
+        }
+        else if (byteScope == 0xC2)
+        {
+            i++;
+            byteScope = (uint8_t)buffer[i];
+            if (byteScope > 0x7F)
+                eAsciiString += (char)(byteScope);
+        }
+    }
+    return eAsciiString;
+}
+
 } // namespace arduino
diff --git a/api/String.h b/api/String.h
index 0bafd35a..11a83b4a 100644
--- a/api/String.h
+++ b/api/String.h
@@ -215,6 +215,7 @@ class String
 	long toInt(void) const;
 	float toFloat(void) const;
 	double toDouble(void) const;
+	String fromUtf8ToEAscii(void) const;
 
 protected:
 	char *buffer;	        // the actual char array