diff --git a/src/web-cef3/web.cpp b/src/web-cef3/web.cpp
index 3f16891d051360a543af7ac34f4946da91c823a7..1e34e39fa2b347997b0c9f67f6e75223272fa4b7 100644
--- a/src/web-cef3/web.cpp
+++ b/src/web-cef3/web.cpp
@@ -620,10 +620,18 @@ void te4_web_inject_key(web_view_type *view, int scancode, int asymb, const char
 		VkCode = VK_TAB;
 	else if (key_code == SDLK_UP)
 		VkCode = VK_UP;
+	else if (unilen == 1 && uni[0] >= '!' && uni[0] <= '@')
+		VkCode = uni[0];
+	else if (unilen == 1 && uni[0] >= '[' && uni[0] <= '`')
+		VkCode = uni[0];
+	else if (unilen == 1 && uni[0] >= '{' && uni[0] <= '~')
+		VkCode = uni[0];
 	else if (unilen == 1 && uni[0] >= 'A' && uni[0] <= 'Z')
 		VkCode = uni[0];
 	else if (unilen == 1 && uni[0] >= 'a' && uni[0] <= 'z')
 		VkCode = uni[0];
+	else if (unilen == 1 && uni[0] >= 'a' && uni[0] <= 'z')
+		VkCode = uni[0];
 	else
 		VkCode = LOBYTE(VkKeyScanA(key_code));
 	UINT scanCode = MapVirtualKey(VkCode, MAPVK_VK_TO_VSC);